HTML之前是否需要编码?

在将数据存储在数据库中之前是否要进行 HTML编码?或者是在通向浏览器的途中进行编码的常规做法?

我的所有基于文本的字段长度在数据库中是否为四倍以允许额外的存储?

寻找最佳实践而不是坚实的是或否:-)

解决方法

您的数据库中的数据是真的是HTML还是应用程序数据,如您刚才知道的名称评论将作为HTML页面的一部分?

如果是应用数据,我认为最好:

>以环境原始形式(例如数据库中未编码的)表示它,
>确保它正确翻译,因为它跨越表示边界(编码时,您生成HTML页面).

如果您是MVC的粉丝,这也有助于将视图/控制器与模型(以及永久存储格式)分离开来.

表示

例如,假设有人发表评论“我喜欢M& Ms”.它可能是最简单的代码中的纯文本字符串“我喜欢M& Ms”,而不是HTML编码的字符串“我喜欢M& amp; Ms”.在技​​术上,代码中存在的数据不是HTML,如果数据被尽可能简单地表示,生命是最简单的.该数据可以稍后在不同的视图中使用,例如.桌面应用该数据可以存储在数据库,平面文件XML文件中,可能以后与其他程序共享.其他程序最简单的假设字符串是“native”表示形式,在数据库和平面文件中的“我喜欢M& Ms”和XML文件中的“我喜欢M& amp; Ms”.我会紧张地看到编码在XML文件中的HTML编码值(“I love& amp; amp; Ms”).

翻译

后来,当数据即将跨越表示边界(例如,以HTML格式显示,存储在数据库中,纯文本文件或XML文件)时,它的重要性是确保它被正确地翻译,以便在格式化为下一个环境.简而言之,当您在HTML页面显示时,请确保将其翻译成正确编码的HTML(手动或通过工具),以便该值准确显示页面上.当您将其存储在数据库中或在查询中使用它时,请使用转义和/或准备语句和绑定变量来确保将相同的概念值准确地表示到数据库.当您将其存储在XML文件中时,您可以确保其XML编码.

跨越表示边界时未能正确翻译是注入攻击的来源,例如sql注入攻击.当您使用多种表示/语言(例如Java,sql,HTML,Javascript,XML等)时,请慎重.

另一方面,如果您真的要将HTML页面片段保存到数据库中,那么我不清楚您在“存储之前编码”的含义.如果它是严格有效的HTML,则所有必需的值都应该已经被编码(例如& amp;& lt; lt等等).

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些