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);
}
..........代码省略若干..........
- PCRE(正则表达式)匹配中文最权威汇总 2015-02-11
- 重新认识PHP中的POST 2015-01-29
- ThinkPHP 伪静态配置(Apache+IIS)(二) 2014-12-10
- ThinkPHP 伪静态配置(Apache+IIS)(一) 2014-12-06
- mysql_real_escape_string()与addsalashes()的区别 2014-12-02