PHP防SQL注入记录

21 篇文章 0 订阅
5 篇文章 0 订阅

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,还是没将单引号转义;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值