【发布时间】:2015-09-02 12:37:09
【问题描述】:
我想让我的网站免受 XSS 攻击。
我有一个模块允许用户将文本(带有特殊字符)插入数据库。此文本显示在起始页上。
现在我的问题是:在将用户输入插入数据库之前我应该使用htmlentities($_POST["userinput"], ENT_QUOTES, 'UTF-8') 吗?
或者我可以将用户输入直接插入到数据库中并使用htmlentities 显示它吗?
【问题讨论】:
-
您不应该操纵原始数据。最好在处理数据时对其进行操作,例如在屏幕上显示或进行计算时。
-
脚本只是将用户输入插入数据库。在另一个站点上,将显示此用户输入-> 不对其进行处理。那么输出中的 htmlentities 是安全的吗?
-
我不完全了解您的计划,但无论什么数据,您都应该始终希望跟踪原始数据。所以我建议你在显示它时使用
htmlentities。还要确保这里的所有内容都是 UTF-8,还有数据库中的存储,因为否则特殊字符可能会不清楚。这可以通过使用utf8_encode和/或utf8_decode来解决,但显然最好确保一切设置正确。