我使用htmlspecialchars()
函数来阻止XSS攻击。我怀疑从下面将数据存储在数据库中的更好方法是什么。
方法1:应用htmlspecialchars()
功能后存储用户输入值。使用它,用户输入"<script>"
将变为“&amp; lt; script&amp; gt;”
方法2:按原样存储用户输入,并在检索数据并在页面上显示时应用htmlspecialchars()
方法。
我怀疑的原因是我相信使用方法1会在数据库上产生开销,而使用方法2数据需要在通过php请求时反复转换。所以我不确定哪一个更好。
有关详细信息,我使用的是htmlspecialchars($val, ENT_QUOTES, "UTF-8")
,因此也会转换为“和”。
请帮我清除疑惑。如果可能,还提供解释。
感谢。
答案 0 :(得分:10)
HTML仅在必要时转义数据,让您有信心知道自己在做什么。这样:
echo htmlspecialchars($data);
好多了:
echo $data; // The data should already come escaped from the database.
// I hope.
答案 1 :(得分:5)
甚至更好的原因是,在截断以适应某个空间时,您会遇到像"&quo..."
这样的可憎之事。抵制诱惑,使您的数据超过最低要求。如果您担心重新处理数据,请将其缓存。
答案 2 :(得分:3)
我的建议是以最纯粹的形式将数据存储在数据库中。您希望将其转换为<script>
的唯一原因是您需要稍后在HTML文档中显示它。但是,在检索数据之后,数据库本身并不需要知道您对数据执行的操作。
答案 3 :(得分:0)
除了XSS攻击之外,如果您将用户输入放入数据库,您是否也应该担心SQL注入攻击?在这种情况下,无论如何,您都希望在将用户输入放入数据库之前将其转义。