我注意到 OWASP 建议使用 a different encoding method专门用于编码 HTML 属性,在 ASP.NET MVC 中有 a helper method专门用于对属性进行编码。
但是,我无法想到 HTML 编码字符串在 HTML 属性上下文中不起作用的任何情况。是否存在使用标准 HTML 编码不足或不正确的情况?如果没有,为什么在某些框架中提供这些额外的方法?
(请注意 not all string escaping frameworks 提供此类方法。)
最佳答案
当您深入了解reference implementation时,encodeForHTMLAttribute
方法调用 HTMLEntityCodec class 的 encode
方法。具有一组不需要编码的免疫字符。 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/