6

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

方法一:应用函数后存储用户输入值htmlspecialchars()。使用它,用户输入"<script>"将变为“<script>” .

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

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

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

请帮助我清除我的疑问。如果可能,也提供解释。

谢谢。

4

4 回答 4

11
  1. 为什么你期望你总是在 HTML 上下文中使用数据?“I <3 you”和“I <3 you”不是同一个数据。因此,将数据按预期存储在数据库中。没有理由将它存储起来。
  2. HTML 仅在必要时转义数据,让您有信心知道自己在做什么。这:

    echo htmlspecialchars($data);
    

    比:

    echo $data; // The data should already come escaped from the database.
                // I hope.
    
于 2012-03-01T08:33:51.957 回答
6

一个更好的理由是,在截断以适应某个空间时,你会遇到诸如"&quo...". 抵制使用超出最低要求的数据的诱惑。如果您担心重新处理数据,请将其缓存。

于 2012-03-01T08:30:54.833 回答
4

我的建议是以最纯粹的形式将数据存储在数据库中。您要将其转换为的唯一原因&lt;script&gt;是因为您稍后需要在 HTML 文档中显示它。但是数据库本身不需要知道你在检索数据后对数据做了什么。

于 2012-03-01T08:36:13.660 回答
0

除了 XSS 攻击,如果您将用户输入放入数据库,您是否也应该担心 SQL 注入攻击?在这种情况下,您将希望在将用户输入放入数据库之前对其进行转义。

于 2012-03-01T08:32:57.240 回答