coldfusion - esapi:对于 src 属性,我们应该使用 encodeForHTMLAttribute 吗?编码ForURL?或两者?

标签 coldfusion xss coldfusion-10 esapi

哪个是正确的?

<img src="#encodeForHTMLAttribute(FORM.path)#">

或者
<img src="#encodeForURL(FORM.path)#">

或者
<img src="#encodeForHTMLAttribute(encodeForURL(FORM.path))#">

?

最佳答案

使用与插入需要编码的文本的上下文相匹配的方法。

encodeForUrl 用于将动态文本放入 URL - 因此它将替换 /%2F ( and so on ),如果你将它应用到整个 URL,你将拥有一个编码的 URL(因此它在 src 属性中被破坏)。

如果您允许用户提供部分 URL,则需要拆分 / (和任何其他相关的分隔符),在每个部分应用 encodeForUrl,然后再次连接在一起。

注: encodeForUrl 似乎将其字符串直接传递给 Java,这意味着反斜杠被视为转义字符 - \b\n编码为 %08%0A而不是 %5Cb%5Cn - 此行为不是标准 URL 编码的一部分(通常也不是 CF 字符串)。为避免这种情况,请改用 UrlEncodedFormat 函数。

encodeForHTMLAttribute 用于将动态文本放入 HTML 属性中 - 其目的是确保将内容视为文本(而不是解析为 HTML) - 它不知道/关心其内容是 URL 还是其他内容。

总结 ,你可能想要 encodeForHtmlAttribute( UrlEncodedFormat( Form.Path ) )对于这种情况。

关于coldfusion - esapi:对于 src 属性,我们应该使用 encodeForHTMLAttribute 吗?编码ForURL?或两者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12923662/

相关文章:

mysql - 无法将 Coldfusion 10 连接到 mysql 5

coldfusion - 在使用 '[bracket]' 和 '. dot' 表示法的查询中找不到访问属性的区别

oracle - 调用 Oracle PL/SQL 过程时使用什么编码

pdf - Coldfusion - 大型假脱机文件的 cfprint 问题

xss - 为什么这个 XSS 不起作用?

iis - 重定向到 404 是有效的,但在 chrome devtools 中,显示了 200 代码

java - Coldfusion 二进制文件

sql-server - ValidateRequest 故障或 SQL Server Bug?

javascript - 防止更改 HTML 表单操作

.net - 未找到 ColdFusion .Net 类