这两个中哪一个是防止xss攻击的更好方法?
我发现第一个更好,因为你可能忘记在显示时添加它。
答案 0 :(得分:6)
这两者中哪一种是防止xss攻击的更好方法。
- 保存在db中的HTMLEntity
- 显示/回显时的HTMLEntity
醇>
2 - 您应该在最后一刻转换为目标格式。这可以帮助您避免遇到问题,例如,您决定要在电子邮件,PDF中使用相同的内容,将文本作为文本返回给用户进行编辑等等。
我找到第一个更好的因为你可能忘记在显示时添加这个
插入数据库时也可能会忘记。
此外,并非所有数据都会进入数据库。例如由于错误而要插入的数据或将数据放回到表单中的预览都是可能的XSS向量。您不希望处理诸如“在放入数据库之前进行编码,或者如果它不是来自数据库则回显到文档中”之类的事情。例外是让自己陷入忘记编码的最佳方式。
答案 1 :(得分:1)
如果您问我,最好的方法(选项编号3 ..)正在使用最新的filter扩展名为您处理过滤(PHP5)。我喜欢将filter_input_array放在我的php文件的顶部以保护自己免受例如POST XSS攻击
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
您应该阅读过滤器文档(教程)并保护自己免受XSS的侵害。
答案 2 :(得分:0)
在显示代码中编码的原因(即从数据库中读取文本后):
编写时我无法想到任何编码原因。你提到可能会忘记在显示逻辑中对数据进行编码,但我认为你同样可能会在存储代码的数据库中忘记它。
答案 3 :(得分:-1)
在保存到db之前,更好的方法是strip_tags()
和htmlentities()
(如果你不介意一些额外的数据)。
但是,请确保您已采取其他预防措施以防止SQL注入,方法是使用mysql_real_escape_string()
或预准备语句数据访问抽象层,例如PDO。