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

Viv*_*ela 5 php mysql xss htmlspecialchars

我正在使用htmlspecialchars()函数来防止XSS攻击.我怀疑从下面将数据存储在数据库中的更好方法是什么.

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

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

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

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

请帮我清除疑惑.如果可能,还提供说明.

谢谢.

dec*_*eze 10

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

    echo htmlspecialchars($data);
    
    Run Code Online (Sandbox Code Playgroud)

    比以下更好:

    echo $data; // The data should already come escaped from the database.
                // I hope.
    
    Run Code Online (Sandbox Code Playgroud)

  • 3.如果转义函数中存在错误,如何解决问题?编辑整个数据库? (2认同)

Ign*_*ams 5

一个更好的理由是,在截断以适应某个空间时,你会陷入诸如此类的可憎之事"&quo...".抵制诱惑,使您的数据超过最低要求.如果您担心重新处理数据,请将其缓存.