PHP防SQL注入记录

来源:互联网 发布:下载云端软件 编辑:程序博客网 时间:2024/06/04 21:04

mysql注入历来是php的一个问题,目前主要有以下几种方案:
(1)addslashes函数
(2)mysql_escape_string 和mysql_real_escape_string 函数(将被废弃或已被废弃)
(3)magic_quotes_gpc自动过滤输入(由于效率问题,5.4以后已被强制关闭,无法开启)
(4)使用pdo/mysql驱动查询,消除注入

看了网上的几篇博文,大致知道了注入的基本原理:

通过提交的数据,篡改SQL语句,使得原来的mysql逻辑被篡改,继而修改数据库的数据或者获取数据库的数据;一般有以下几种注入攻击:1. 验证注入:注入“and 1=1”;2. 判断字段数:    (1)嵌入order by 1,2,3....直到报错就知道总共字段数    (2)UNION SELECT ...联合查询,不断改变字段数目,直到正常查询时,就是字段数了3. 查询库名:在直到字段数的前提下,通过union select来查询数据库名字数据4. 查表名:前提是查出库名,原理同查询库名5. 查字段:前提是查出表名,原理同查询库名6. 查数据:前提是查出字段名,原理同查询库名

然后呢,防止注入的方法:

1. 对输入字段进行过滤,如对敏感字符(如单引号,双引号等)添加反斜杠2. 使用参数化的过滤性语句(参数化配合mysql的预编译还可以起到加速功能);3. 避免使用解释程序4. 避免出现一些详细的错误消息

注意:
1. addslashes和mysql_escape_string对于GBK编码有漏洞,在GBK下当遇到单引号时,只是将将0xbf27修改为0xbf5c27,还是没将单引号转义;

原创粉丝点击