sql注入攻击(sqlInjection),是攻击者在表单中提交精心构造的sql语句,改变原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入攻击。
sql注入攻击的一般步骤:
1、攻击者访问有sql注入漏洞的网站,寻找注入点
2、攻击者构造注入语句,注入语句和程序中的sql语句结合生成新的sql语句
举个栗子:
1 //执行mySQL查询语句 2 3 $query="select*from xxx where id=".$_GET["id"]; 4 $result=MysqL_query($query) 5 or die("执行ySQL查询语句失败:".MysqL_error());
参数id传递进来后,和前面的字符串结合的sql语句放入数据库进行查询
提交and1=1,语句变成select*frompostmessagewhereid=71and1=1这语句前值后值都为真,and以后也为真,返回查询到的数据
提交and1=2,语句变成select*frompostmessagewhereid=71and1=2这语句前值为真,后值为假,and以后为假,查询不到任何数据
正常的SQL查询,经过我们构造的语句之后,形成了sql注入攻击。通过这个注入点,我们还可以进一步拿到权限,比如说利用union读取管理密码,读取数据库信息,或者用MysqL的load_file,intooutfile等函数进一步渗透。
防范方法:
整型参数:
使用int val函数将数据转换成整数
函数原型:
1 int intval(mixed var,int base) 2 var 是要转换成整形的变量 3 base,可选,是基础数,默认是10
浮点型参数:使用floatval或doubleval函数
分别转换单精度和双精度浮点型参数
函数原型:
1 int floatval(mixed var) 2 var 是要转换的变量 3 4 int doubleval(mixed var) 5 var 是要转换的变量
字符型参数:
使用addslashes函数来将单引号“'”转换成“\'”,双引号“"”转换成“\"”,反斜杠“\”转换成“\\”
1 string addslashes(string str) 2 str 是要检查的字符串
举个防范梨子:
如果是字符型
1 if (magic_quotes_gpc) 2 { 3 $var = $_GET['$var']; 4 } 5 else 6 { 7 $var = addslashes($_GET['$var']); 8 }
注://magic_quotes_gpc函数在PHP中的作用是判断解析用户提示的数据,如包括有:post、get、cookie过来的数据增加转义字符“\”,以确保这些数据不会引起程序,特别是数据库语句因为特殊字符引起的污染而出现致命的错误
在magic_quotes_gpc=On的情况下,如果输入的数据有单引号(’)、双引号(”)、反斜线()与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。