【发布时间】:2023-04-06 17:56:01
【问题描述】:
这两种方法中哪一种是防止 xss 攻击的更好方法?
- 保存在 db 中的 HTMLEntities
- 显示/回显时的 HTMLEntities
我发现第一个更好,因为您可能在显示时忘记添加它。
【问题讨论】:
-
第二个可能会更好,因为您可能会在保存到数据库时忘记这样做。
这两种方法中哪一种是防止 xss 攻击的更好方法?
我发现第一个更好,因为您可能在显示时忘记添加它。
【问题讨论】:
这两种方法中哪一种是防止 xss 攻击的更好方法。
- 保存在 db 中的 HTMLEntities
- 显示/回显时的 HTMLEntities
2 — 您应该在最后一刻转换为目标格式。例如,如果您决定将电子邮件、PDF 中的相同内容作为文本返回给用户进行编辑等,这可以帮助您避免出现问题。
我发现第一个更好,因为您可能会在显示时忘记添加它
你也可能在插入数据库时忘记了。
此外,并非所有数据都进入数据库。例如即将插入的数据预览或由于错误而放回表单的数据都是可能的 XSS 向量。您不想处理诸如“在放入数据库之前编码,或者如果它不是来自数据库,则在回显到文档时”之类的事情。例外是让自己陷入忘记编码的最佳方式。
【讨论】:
如果您问我,最好的方法(选项编号 3..)是使用最新的 filter 扩展来为您处理过滤(PHP5)。我喜欢将filter_input_array 放在我的 php 文件的顶部,以保护自己免受例如 POST XSS 攻击
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
您应该阅读过滤器文档(教程)并保护自己免受 XSS 输入。
【讨论】:
GET 和 SQL 注入),并且对受损的数据库没有帮助。此外,它还会修改合法的输入。
显示代码中编码的原因(即从数据库中读取文本后):
写作时我想不出任何编码的理由。您提到有人可能会忘记在显示逻辑中对数据进行编码,但我认为您同样可能会在存储代码的数据库中忘记它。
【讨论】:
html_entity_decode 的等价物。 2. 不需要从 Web 应用程序中利用数据库中的漏洞。有时,数据库主机损坏,或者数据库密码被猜到。用你的比喻来说:你宁愿在访客之前打扫房间,因为你可以保护门和大门,但忘记墙壁和天花板。
在保存到数据库之前,更好的方法是strip_tags() 和htmlentities()(如果您不介意一些额外的数据)。
但是,请确保您还采取了其他预防措施来防止 SQL 注入,方法是使用 mysql_real_escape_string() 或准备好的语句数据访问抽象层,例如 PDO。
【讨论】:
strip_tags 不必要地修改了有效输入。此外,您没有回答何时编码的问题。
$allowable_tags 设置为什么,this question 都会出现乱码。
strip_tags 不可逆,所以像a<!--b-->c 这样的合法输入将呈现为ab。