Ahm*_*met 235 html html-encode html-entities html-escape-characters
它们是否与XML相同,也许加上空间one( )?
我发现了一些HTML转义字符的巨大列表,但我不认为它们必须被转义.我想知道需要逃脱的内容.
小智 287
如果要在文档中插入文本内容所在的位置1,则通常只需要转义与XML相同的字符.在元素内部,这只包括实体转义&符号&和元素分隔符小于和大于符号< >:
& becomes &
< becomes <
> becomes >
Run Code Online (Sandbox Code Playgroud)
在属性值内部,您还必须转义您正在使用的引用字符:
" becomes "
' becomes '
Run Code Online (Sandbox Code Playgroud)
在某些情况下,跳过逃避其中一些角色可能是安全的,但我鼓励你在所有情况下逃避所有五个角色以减少犯错误的可能性.
如果您的文档编码不支持您正在使用的所有字符,例如,如果您尝试在ASCII编码的文档中使用表情符号,则还需要避开这些字符.如今,大多数文档都使用完全支持Unicode的UTF-8编码进行编码,而这些编码并不是必需的.
一般来说,你不应该逃避空格 . 不是一个普通的空间,它是一个不间断的空间.您可以使用这些而不是普通空格来防止在两个单词之间插入换行符,或者在不自动折叠的情况下插入额外空格,但这通常是一种罕见的情况.除非您有需要它的设计约束,否则不要这样做.
1 "预期文本内容的位置",我指的是适用普通解析规则的元素或引用属性值.例如:<p>HERE</p>或<p title="HERE">...</p>.我上面写的内容不适用于具有特殊解析规则或含义的内容,例如脚本或样式标记内部,或者作为元素或属性名称.例如:<NOT-HERE>...</NOT-HERE>,<script>NOT-HERE</script>,<style>NOT-HERE</script>,或<p NOT-HERE="...">...</p>.
在这些情况下,规则更复杂,并且更容易引入安全漏洞.我强烈建议您不要在任何这些位置插入动态内容.我已经看到有能力的安全感知开发人员团队通过假设他们已正确编码这些值但缺少边缘情况来引入漏洞.通常有一个更安全的替代方法,例如将动态值放在属性中,然后使用JavaScript处理它.
如果必须,请阅读开放式Web应用程序安全项目的XSS预防规则,以帮助您了解需要牢记的一些问题.
dax*_*rod 21
这取决于具体情况.HTML中的一些可能的上下文:
请参阅OWASP的跨站点脚本编写预防备忘单,尤其是" 为什么我不能只是HTML实体编码不受信任的数据? "和" XSS预防规则 "部分.但是,最好阅读整个文档.
基本上,有三个主要字符应该总是在HTML和XML文件中进行转义,因此它们不会与其他标记进行交互,所以正如您可能期望的那样,其中两个将是语法包装器,它们是< >,它们列出如下:
1) < (<)
2) > (>)
3) & (&)
Run Code Online (Sandbox Code Playgroud)
我们也可以使用双引号(")作为"和单引号(')作为'
避免将动态内容放入<script>和<style>.这些规则不适用于它们.例如,如果必须在a中包含JSON,请将<with\x3c替换为U + 2028字符,将\ u2028替换为U + 2029,并在JSON序列化后替换为\ u2029.)
HTML转义字符:完整列表:http: //www.theukwebdesigncompany.com/articles/entity-escape-characters.php
所以你需要转义<,或者当后面跟着任何可以开始字符引用的东西时.另外关于&符号的规则是引用属性的唯一规则,因为匹配的引号是唯一终止一个的引号.但是,如果您不想在那里终止属性值,请转义引号.
更改为UTF-8意味着重新保存文件:
对页面使用UTF-8字符编码意味着您可以避免使用大多数转义并只使用字符.但请注意,要更改文档的编码,仅更改页面顶部或服务器上的编码声明是不够的.您需要以该编码重新保存文档.有关如何使用应用程序执行此操作的帮助,请阅读在Web创作应用程序中设置编码.隐形或模棱两可的人物:
转义的一个特别有用的角色是表示在表示中不可见或不明确的字符.
一个例子是Unicode字符U + 200F RIGHT-TO-LEFT MARK.此字符可用于阐明双向文本中的方向性(例如,使用阿拉伯语或希伯来语脚本时).但是,它没有图形格式,因此很难看到这些字符在文本中的位置,如果它们丢失或遗忘,它们可能会在以后的编辑过程中产生意外的结果.使用(或其数字字符引用等效)可以很容易地发现这些字符.
U + 00A0 NO-BREAK SPACE是一个模糊字符的例子.这种类型的空间可以防止断行,但在用作角色时,它看起来就像任何其他空间一样.使用可以清楚地说明文本中出现这些空格的位置.
如果你想使用 JavaScript 转义标记字符串,可以使用:
或者,如果您不想引入依赖项,这里是同样的事情,尽管速度稍慢,因为它使用split/map/join而不是charCodeAt/substring.
function escapeMarkup (dangerousInput) {
const dangerousString = String(dangerousInput);
const matchHtmlRegExp = /["'&<>]/;
const match = matchHtmlRegExp.exec(dangerousString);
if (!match) {
return dangerousInput;
}
const encodedSymbolMap = {
'"': '"',
'\'': ''',
'&': '&',
'<': '<',
'>': '>'
};
const dangerousCharacters = dangerousString.split('');
const safeCharacters = dangerousCharacters.map(function (character) {
return encodedSymbolMap[character] || character;
});
const safeString = safeCharacters.join('');
return safeString;
}
Run Code Online (Sandbox Code Playgroud)