addslashes()和stripslashes()这对函数,一般教程只是说入库用前者,出库时用后者转回原样。如果按照这个思路,一些留言板访问者输入“<script>alert('HI')</script>”,经addslashes()转换后变成“<script>alert(\'HI\')</script>”,但出库时又被stripslashes()还原,结果还是达到了注入者的目的。对于实际应用,感觉没什么意义:1、对于一些搜索,比如URL请求中的id值或站内搜索keyword的文本input,这些往往会附加到SQL的where子句中,如'select ......where name='.$_GET['keyword'],用mysqli_real_escape_string()也可以达到目的。2、对于表单input文本提交,比如文章字段内容,则是htmlentities()或htmlspecialchars()更有用,然后取出显示时不需要再做过滤。
不知道老手是怎么看这方面的安全?

解决方案 »

  1.   

    问题分开来说, 一个是sql注入, 一个是xss注入。入口防sql, 出口防xss。 这刚好对应你所提的两个问题。
      

  2.   

    是防SQL注入的LZ 说的第1点可以达到同样效果对于一些标签注入,LZ 说的第2点可以达到效果
      

  3.   

    我觉得这个主要不是防sql注入(虽然它也可以防)
    主要是为了sql不出错,要不带'或带"的语句就会报错无法执行,
      对mysql用mysql_real_escape_string更好,但是有些数据库扩展里没有这样的函数就只能用addslashes了同样,如果输出带变量的字符串到文件也可能有同样问题,
    比如要写$x='$b';到文件里(比如配置文件),当$b="xx'xx"时,不加slash的话,再次读入时就出错了
      

  4.   

    看来楼上视野更广,今天在解析DEDECMS,也发现这个问题