html - HTML 属性编码/转义与常规 HTML 编码有何不同?

标签 html security escaping

我注意到 OWASP 建议使用 a different encoding method专门用于编码 HTML 属性,在 ASP.NET MVC 中有 a helper method专门用于对属性进行编码。

但是,我无法想到 HTML 编码字符串在 HTML 属性上下文中不起作用的任何情况。是否存在使用标准 HTML 编码不足或不正确的情况?如果没有,为什么在某些框架中提供这些额外的方法?

(请注意 not all string escaping frameworks 提供此类方法。)

最佳答案

当您深入了解reference implementation时,encodeForHTMLAttribute 方法调用 HTMLEntityCodec classencode 方法。具有一组不需要编码的免疫字符。 encode 方法内部,继承自 Codec class ,您可以看到任何不在免疫集中的非字母数字字符都将由字符引用进行编码。

现在您已经注意到 HTML 和 HTML 属性的免疫集是不同的,特别是在 HTML 属性中,空间不被认为是免疫的:

private final static char[]     IMMUNE_HTML = { ',', '.', '-', '_', ' ' };
private final static char[] IMMUNE_HTMLATTR = { ',', '.', '-', '_' };

原因可能是因为 HTML 属性不一定需要加引号。安时quotes are missing ,一个文字 space character将结束属性值。在这种情况下,空格字符需要通过字符引用进行编码才能解释为值的一部分。

关于html - HTML 属性编码/转义与常规 HTML 编码有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12360646/

相关文章:

javascript - 在 JavaScript 中导入 Excel 文件

html - 使用 CSS 对齐图像

javascript - 使用 jQuery .hide/.show 仅显示和隐藏一个 <div>

node.js - 使用 "npm install"的漏洞问题

security - 这种使用 HttpOnly Cookie 的 XSS 保护能起作用吗?

powershell - Windows 使用 powershell 安排任务创建问题

ruby - gsub 中的反斜杠(转义和反向引用)

javascript - 将数据发送到 firebase 并返回到 index.html

javascript - 使用不受信任的字符串调用 require() 会出现安全问题 (require.js)

javascript - ReactJs:如何转义 <p> 包含来自 props 的数据渲染