addslashes防sql注入12-02
首先要知道的是,数据库本身会对单引号过敏。
PHP为了安全性,所以引入了个magic_quotes_gpc = On的功能,可以不需要做任何处理就能直接把单引号插入数据库中,那么对于Off时,则需要考虑单引号的问题了,而不是一味地信任运行环境。
现在需要了解的是addslashes()和stripslashes()的作用是相反的:
addslashes()加个\\(专业点叫做转义),stripslashes()去个\\
当magic_quotes_gpc = On时,使用了addslashes()处理后的数据在数据库中将以\'形式保存,如果此时直接输出的话,就会发现比自己期待的内容多了个\,因stripslashes()出场了,它能把\去掉(区别于str_replace(”\”, “”,$Str))。
当magic_quotes_gpc = Off时,使用了addslashes()处理后的数据在数据库中将以'形式保存,没有上面说的有\\的问题,addslashes()起到插入数据不出错的作用,如果此时直接输出的话,数据正常。不需要再用stripslashes()。
有点绕,到底什么时候用呢?
简单说:当magic_quotes_gpc = Off时,系统不会处理单引号等问题,所以插入数据时必须要使用addslashes(),显示数据时则不需要使用stripslashes();
当magic_quotes_gpc = On时,系统会自动处理单引号等问题,用不用addslashes()和stripslashes()都没关系,但是如果添加数据时用了addslashes(),那么显示数据时必须要stripslashes()。
根据以上两种情况,再简单点说就是:
不管magic_quotes_gpc是On还是Off,咱添加数据时都用addslashes(),当On时,必须使用stripslashes(),Off时则不能用stripslashes()。
那么如何判断On还是Off呢?
现在需要了解的是get_magic_quotes_gpc(),来获取magic_quotes_gpc()的状态。
所汇聚成代码就是这样的:
//存储数据的处理
$content = addslashes($_POST[‘content’]);
mysql_query($content);
.........代码省略若干..........
//查询数据的处理
if(get_magic_quotes_gpc()){
$content = stripslashes($content);
}
..........代码省略若干..........
- stream_socket_enable_crypto(): this stream does not support SSL/crypto 2015-06-10
- 邮箱类的调用 2015-06-09
- var_dump和var_export 2015-06-02
- CURL的配置使用 2015-05-26
- WAMP环境搭建之APACHE配置 2015-03-25