php - 在将用户输入存储到数据库之前对其进行转义/编码或将其按原样存储在数据库中并在检索时转义它更好吗?

标签 php mysql xss htmlspecialchars

我正在使用 htmlspecialchars()功能来防止XSS攻击。我对以下将数据存储在数据库中的更好方法有疑问。

方法 1:应用 htmlspecialchars() 后存储用户输入值功能。使用它用户输入 "<script>"将变成“<脚本>” .

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

我怀疑的原因是我认为使用方法1会对数据库有开销,而使用方法2数据在通过php请求时需要一次又一次地转换。所以我不确定哪个更好。

有关更多信息,我正在使用 htmlspecialchars($val, ENT_QUOTES, "UTF-8")这样也会转换 ' 和 "。

请帮我解开疑惑。如果可能,还请提供解释。

谢谢。

最佳答案

  1. 为什么您希望始终在 HTML 上下文中使用数据? “我 <3 你”和“我 <3 你”不是相同的数据。因此,按预期将数据 存储在数据库中。没有理由存储它以逃脱。
  2. HTML 在必要时转义数据,让您有信心知道自己在做什么。这:

    echo htmlspecialchars($data);
    

    比:

    好很多
    echo $data; // The data should already come escaped from the database.
                // I hope.
    

关于php - 在将用户输入存储到数据库之前对其进行转义/编码或将其按原样存储在数据库中并在检索时转义它更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9512873/

相关文章:

php - if/else 简写来定义一个变量

php - MYSQL 值与输入不匹配

php - htmlspecialchars() 应该用于输入信息还是输出之前?

php - 为防止 XSS 和 SQL 注入(inject)而限制的字符列表?

javascript - XSS:为什么在分配此 javascript 字符串时会触发警报?

PHP7 : array_key_exists() - something is wrong

javascript - Ajax MySQL 查询不返回当前数据

mysql - Docker 与 mysql 和 django。尽管进行了任何尝试,与 mysql 的连接都被拒绝

php - 将 PHP MYSQL 中类别表中的所有顶级类别作为 Optgroup

php 如果 id==0 不起作用