Php 在将用户输入存储到数据库之前对其进行转义/编码,还是按原样存储并在检索时转义?

Php 在将用户输入存储到数据库之前对其进行转义/编码,还是按原样存储并在检索时转义?,php,mysql,xss,htmlspecialchars,Php,Mysql,Xss,Htmlspecialchars,我正在使用htmlspecialchars()函数来防止XSS攻击。我对以下哪种方法更好地将数据存储在数据库中表示怀疑 方法1:应用htmlspecialchars()函数后存储用户输入值。使用此it用户输入“将成为“脚本” 方法2:按原样存储用户输入,并在检索数据并将其显示在页面上时应用htmlspecialchars()方法 我怀疑的原因是,我相信使用方法1会给数据库带来开销,而使用方法2需要在通过php请求时反复转换数据。所以我不确定哪一个更好 有关更多信息,我正在使用htmlspecia

我正在使用
htmlspecialchars()
函数来防止XSS攻击。我对以下哪种方法更好地将数据存储在数据库中表示怀疑

方法1:应用
htmlspecialchars()
函数后存储用户输入值。使用此it用户输入
将成为“脚本”

方法2:按原样存储用户输入,并在检索数据并将其显示在页面上时应用
htmlspecialchars()
方法

我怀疑的原因是,我相信使用方法1会给数据库带来开销,而使用方法2需要在通过php请求时反复转换数据。所以我不确定哪一个更好

有关更多信息,我正在使用
htmlspecialchars($val,entu引号,“UTF-8”)
以便将“and”也转换为“and”

请帮我澄清我的疑问。如果可能的话,请提供解释


谢谢。

一个更好的原因是,为了适应特定的空间而截断时,你会被一些讨厌的东西卡住,比如
“。。。“
。抵制干扰数据超过最低要求的诱惑。如果您担心重新处理数据,请将其缓存。

以及XSS攻击,如果您将用户输入放入数据库,您不也应该担心SQL注入攻击吗?在这种情况下,您将希望在将用户输入放入数据库之前转义用户输入


  • 为什么希望始终在HTML上下文中使用数据?“我我的建议是以最纯粹的形式将数据存储在数据库中。您希望将其转换为
    script
    的唯一原因是,您以后需要将其显示在HTML文档中。但数据库本身不需要知道您在检索数据后如何处理它。

    htmlspecialchars()
    无法阻止SQL注入攻击。此外,无论如何,每个人都应该使用参数化查询。3.如果转义函数中存在错误,如何解决问题?当然可以编辑整个数据库?@Erlend,但这与本例无关。如果写入错误数据,则必须在你会发现,这在你写数据库(或任何文档)的任何地方都是如此@Lister先生:这与所问的问题非常相关。如果你在显示屏上存储转义数据,当发现错误的转义逻辑时,你不必触摸数据库。只需更改转义逻辑。在大多数情况下,这比修复数据库中的数据更简单。
    echo htmlspecialchars($data);
    
    echo $data; // The data should already come escaped from the database.
                // I hope.