HTML在存储或显示时编码用户输入

时间:2008-10-21 20:58:59

标签: html security xss html-encode

一直困扰我的简单问题。

我应该立即对用户输入进行HTML编码并将编码内容存储在数据库中,还是应该在显示时存储原始值和HTML编码?

存储编码数据可以大大降低开发人员在显示数据时忘记对数据进行编码的风险。但是,存储编码数据会使数据挖掘变得更加麻烦,并且会占用更多空间,即使这通常不是问题。

5 个答案:

答案 0 :(得分:25)

我强烈建议在出路时编码信息。如果您希望更改在某个点查看的方式,将原始数据存储在数据库中非常有用。流程应该类似于:

sanitize user input -> protect against sql injection -> db -> encode for display

考虑一下您可能希望将信息显示为RSS源的情况。在重新显示之前必须重做任何HTML特定的编码似乎有点傻。任何开发都应该始终遵循“不信任输入”模因,无论输入是来自用户还是来自数据库。

答案 1 :(得分:6)

编码应该只在显示器中完成。毫无例外。

答案 2 :(得分:6)

输出。

使用HTML,您不能简单地检查字符串的长度(&amp;是1个字符,但strlen()会告诉您5),您可以轻松裁剪它(它可能会破坏实体)。< / p>

您可能需要将来自数据库的字符串与来自其他来源的字符串混合,或者将其读取和写回。在整个应用程序范围内执行此操作而不会错过任何转义并避免双重转义是一场噩梦。

PHP尝试与magic_quotes做类似的事情,结果证明是一个巨大的失败。不要走magic_entities路线! :)

答案 3 :(得分:5)

请注意,您可能需要使用不了解HTML编码文本的内容(例如,报告工具)访问数据库。我同意空间不是问题,但恕我直言,将HTML编码放入数据库会将您的视图/前端知识转移到应用程序的最低层,这是一个设计错误。

答案 4 :(得分:0)

这不会破坏编码的目的吗?如果输入恶意sql脚本作为输入,然后将其传递给db,则可能会导致严重问题。