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()更有用,然后取出显示时不需要再做过滤。
不知道老手是怎么看这方面的安全?
不知道老手是怎么看这方面的安全?
主要是为了sql不出错,要不带'或带"的语句就会报错无法执行,
对mysql用mysql_real_escape_string更好,但是有些数据库扩展里没有这样的函数就只能用addslashes了同样,如果输出带变量的字符串到文件也可能有同样问题,
比如要写$x='$b';到文件里(比如配置文件),当$b="xx'xx"时,不加slash的话,再次读入时就出错了