PHP 之防御 sql 注入攻击的方式

2016-07-25 14:23:38 +08:00
 lampbrother

长期以来, web 的安全性存在着巨大的争议与挑战。其中, sql 注入就是一种常见的一种攻击方法,开发人员普遍的做法就是不停的过滤,转义参数,可是我们 php 大法天生弱类型的机制,总是让黑客有机可乘,绕过防御与防御总是在明争暗斗。

兄弟连( www.lampbrother.net ) PHP 大牛说过一句话,在一个程序中, 60%的代码都应该是在进行各种防御。

其实,现在来看,防御 sql 注入其实并不需要进行各种参数过滤,以下将开启干货模式!

PHP5.x 开始引入了一种新的 mysql 操作方式-----mysqli ,在 php 中也有一项相应的操作方式叫做 PHP 预处理。采用面向对象的方式来进行参数化绑定操作,由于对数据库操作的模式驱动不同,因此可以非常有效的防御 sql 注入。

首先,我们先来看一段代码例子 php 代码:

prepare($search_sql);//进行预处理操作

$search_action ->bind_param("s",$keywords);//绑定参数,第一个参数表示为上面预处理的的占位符的数量和每一个参数的数据类型, s 为字符串, i 为整形, d 为双精度小数,有几个参数,就写几个 s 或 d 或 i ,比如说 iiii,ssss,sidi 这样的。然后后面就是有几个参数就写几个要绑定的变量,比如 bind_param('sss',$username,$password,$code); $search_action ->bind_result($content);//将结果绑定在相对应的变量上,比如你 select 了 username,password,你就可以写 bind_result($usernmae,$password); $search_action ->execute();//执行 sql 操作 while($search_action ->fetch()){ echo $content.'
'; } $search_action ->free_result();//释放内存 $search_action ->close();//结束这个实例化 ?> 上面是 php 预处理中一个非常简单的例子,它内置的其他函数能很方便我们的开发速度,那么看到这里,很多人可能还是不明白,有人可能想问,你这个绑定参数是不是还是在拼凑 sql 语句?如果是拼凑语句,那还不是会产生注入吗?

这就要从他的操作原理来解释了,其实它在 prepare 操作中,就已经在数据库中,执行了语句,以后的绑定参数和执行,只不过是再传递数据进去而已,所以根本不会和 sql 语句拼接,也就自然不会将危险代码执行。因此,在这种模式下 sql 注入就能很有效的被防御了。

在 php 预处理的类中有很多很好用的操作,具体的兄弟连将会在以后的文章中为大家总结一些常用的 php 预处理的开发语句。

2445 次点击
所在节点    PHP
7 条回复
cxbig
2016-07-25 15:59:33 +08:00
这年头还在推广用 mysqli ,别误人子弟了好吧。。。
mko0okmko0
2016-07-25 16:52:59 +08:00
直接讲 prepare 就好了,PDO 跟 mysqli/mysql 驱动都有这些东西,用什么驱动不是重点,
重点是,prepare 挡不住全部的插入攻击,尤其是 like '%?%' 有用 like 的应该要额外处理.
kuannz
2016-07-25 18:52:29 +08:00
xming
2016-07-25 19:02:52 +08:00
垃圾兄弟连 推广都搞到这了
xming
2016-07-25 19:03:04 +08:00
呸呸
SlipStupig
2016-07-25 22:59:02 +08:00
mysqli 并不安全,比如 A beteewn B 这个时候还是能进行盲注,最安全的还是编译 sql 语句....
npc0der
2016-07-26 09:45:07 +08:00
60%代码在进行防御的能称为大牛?别误人子弟了吧!个人观点 不喜可喷!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/294761

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX