Hen*_*nry 4 xss coldfusion esapi coldfusion-10
哪一个是正确的?
<img src="#encodeForHTMLAttribute(FORM.path)#">
Run Code Online (Sandbox Code Playgroud)
要么
<img src="#encodeForURL(FORM.path)#">
Run Code Online (Sandbox Code Playgroud)
要么
<img src="#encodeForHTMLAttribute(encodeForURL(FORM.path))#">
Run Code Online (Sandbox Code Playgroud)
?
使用与插入需要编码的文本的上下文匹配的方法.
encodeForUrl用于将动态文本放入URL中 - 因此它将替换/为%2F(依此类推),如果将其应用于整个URL,则会有一个编码的URL(因此在src属性中使用时会被破坏).
如果您允许用户提供部分URL,则需要拆分/(以及任何其他相关分隔符),在每个部分上应用encodeForUrl,然后再次连接在一起.
注意: encodeForUrl似乎直接将其字符串传递给Java,这意味着反斜杠被视为转义字符 - \b\n编码%08%0A而不是%5Cb%5Cn- 此行为不是标准URL编码的一部分(通常也不是CF字符串).为避免这种情况,请使用UrlEncodedFormat函数.
encodeForHTMLAttribute用于将动态文本放入HTML属性中 - 其目的是确保将内容视为文本(未解析为HTML) - 它不知道/关心其内容是URL还是其他内容.
总之,您可能想要encodeForHtmlAttribute( UrlEncodedFormat( Form.Path ) )这种情况.