简单的问题一直困扰着我。
我应该立即对用户输入进行 HTML 编码并将编码的内容存储在数据库中,还是应该在显示时存储原始值和 HTML 编码?
存储编码数据大大降低了开发人员在显示数据时忘记编码数据的风险。但是,存储编码数据会使数据挖掘更加麻烦,并且会占用更多空间,即使这通常不是问题。
简单的问题一直困扰着我。
我应该立即对用户输入进行 HTML 编码并将编码的内容存储在数据库中,还是应该在显示时存储原始值和 HTML 编码?
存储编码数据大大降低了开发人员在显示数据时忘记编码数据的风险。但是,存储编码数据会使数据挖掘更加麻烦,并且会占用更多空间,即使这通常不是问题。
我强烈建议在出路时编码信息。如果您希望更改在某个点查看原始数据的方式,则将原始数据存储在数据库中很有用。流程应该类似于:
sanitize user input -> protect against sql injection -> db -> encode for display
考虑一下您可能希望将信息显示为 RSS 提要的情况。在重新显示之前必须重做任何 HTML 特定编码似乎有点愚蠢。任何开发都应始终遵循“不信任输入”的模因,无论该输入来自用户还是来自数据库。
请记住,您可能需要使用无法理解 HTML 编码文本的东西(例如,报告工具)来访问数据库。我同意空间不是问题,但是恕我直言,将 HTML 编码放入数据库中会将您的视图/前端的知识转移到应用程序的最低层,这是一个设计错误。
编码只能在显示器中完成。没有例外。
输出。
使用 HTML,您不能简单地检查字符串的长度(&
是 1 个字符,但strlen()
会告诉您 5 个字符),您可以轻松裁剪它(它可能会破坏实体)。
您可能需要将数据库中的字符串与其他来源的字符串混合,或者将它们读回并写回。在不遗漏任何转义和避免双重转义的情况下在整个应用程序范围内执行此操作是一场噩梦。
PHP 试图做类似的事情,magic_quotes
结果却是一个巨大的失败。不走magic_entities
路线!:)