百木园-与人分享,
就是让自己快乐。

PHP代码审计之SQL注入

代码审计之SQL注入

SQL注入攻击(SQLInjection),是攻击者在表单中提交精心构造的sql语句,改变原来的sql语句,如果web程序没有对提交的数据经过检查,那么就会造成sql注入攻击。

SQL注入攻击的一般步骤:

1、攻击者访问有SQL注入漏洞的网站,寻找注入点

2、攻击者构造注入语句,注入语句和程序中的SQL语句结合生成新的sql语句

3、新的sql语句被提交到数据库中进行处理

4、数据库执行了新的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函数来将单引号“\'”转换成“\\\'”,双引号“\"”转换成“\\\"”,反斜杠“\\”转换成“\\\\”

NULL字符加上反斜杠“\\”函数原型

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这个函数来为字符串增加转义。

 

 

 


来源:https://www.cnblogs.com/mantou0/p/15988941.html
本站部分图文来源于网络,如有侵权请联系删除。

未经允许不得转载:百木园 » PHP代码审计之SQL注入