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>标记,它就不会成功,我们会因此获得支持电话和电子邮件.
我的问题是:什么是最好的选择,或者如果有另一种方法可以解决这个问题,它是什么?