addslashes防sql注入
twocode

    首先要知道的是,数据库本身会对单引号过敏。

    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); 

     } 

     ..........代码省略若干..........

网友评论已关闭