php防止sql注入的程序设计

正确的防止sql注入:(1)找到所有的sql注入漏洞。(2)修补这些漏洞

sql注入的防御不是一件简单的事,技术一般常常会走入一些误区,比如只对用户的输入做一些escape处理,这是非常不够的,在php中,很多是用mysql_real_escape_string。但是这是可能被绕过的,那是不是再增加一些过滤字符就可以了呢,比如处理空格,括号,select,insert等。其实这种基于黑名单的方式,都或多或少存在一些问题。而在sql的保留字中,像having,order by等都可能出现在自然语言中,从而造成误杀。正确的做法是使用预编译语句,在php中可以用:

$stmt = $mysqli->prepare();

$stmt->bind_param();

关于具体语法请查看手册,这里不再详述。

使用预编译的sql语句,sql语句的语义不会发生改变。在sql语句中,变量用?表示,攻击者无法改变sql的结构。

除了使用预编译语句外,还可以使用安全的存储过程对抗sql注入。检查数据类型。


总结:在php中使用预编译sql语句及检查数据类型是最好的方式。

第三方扩展:利用pdo操作数据库是一种好的避免sql注入的方式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值