使用HTML保存属性 - 在输入或显示时进行编码?

Bra*_*ery 5 html-encode

我有一个系统,允许用户将HTML保留字符输入文本区域,然后将其发布到我的应用程序.然后将该信息保存到数据库中以供以后检索和显示.警报(应该)在你的头脑中消失.我需要确保避免XSS攻击,因为我会在应用程序的其他位置显示此数据.我看到以下是我的选择:

在保存到DB之前进行编码

我可以在进入数据库的过程中对数据进行HTML编码,因此数据库中不会输入任何HTML字符.

优点:

  • 开发人员不必记住在网页上显示数据时对数据进行HTML编码.

缺点:

  • 现在,数据对于基于桌面的应用程序(或HTML以外的任何其他应用程序)没有意义.东西出现像< > &等.

保存到DB之前不要进行HTML编码

每当我需要在网页上显示数据时,我都可以对数据进行HTML编码.

优点:

  • 感觉正确,因为它保持了用户输入的数据的完整性.
  • 允许非基于HTML的应用程序只显示此数据,而无需担心HTML编码.

缺点:

  • 我们可能会在很多地方显示这些数据,我们必须确保每个开发人员都知道,当您显示此字段时,您需要对其进行HTML编码.
  • 人们忘记了事情.当我们忘记对数据进行HTML编码时,至少会有一次实例.

保存到DB之前擦除数据(不要HTML编码)

我可以使用经过充分测试的第三方库来删除潜在危险的HTML并获取安全的HTML片段来保存数据库,而不是HTML编码.

优点:

  • 保留大部分原始输入,以便以非HTML格式显示.
  • 如果开发人员忘记HTML编码此信息以便在网页上显示,则可以减少灾难性.

缺点:

  • 当用户最初输入数据时仍然会混淆数据.如果他们真的想要输入<script><object>标记,它就不会成功,我们会因此获得支持电话和电子邮件.

我的问题是:什么是最好的选择,或者如果有另一种方法可以解决这个问题,它是什么?

Ode*_*ded 4

正确做法是不要破坏/更改用户输入。

因此,保存前不要编码。

是的,这让开发人员有责任记住并知道他们需要对来自数据库的任何内容进行编码,但无论如何这都是一个很好的做法。