如何在c:中避免使用XSS?

时间:2013-06-27 09:26:04

标签: jsp jstl security xss veracode

通常我使用veracode扫描我的代码更改以检测安全漏洞。现在DB中有一个字符串,我在一个名为custFunctionality的字符串中收集,之前我在jsp中显示为:

out.println(<%= custFunctionality %>);

好的veracode扫描了它,让我知道它构成了一个安全缺陷。

所以我在这里使用c: out

<c:out escapexml='false' value='${custFunctionality }'/>

现在的问题是该字符串由html相关标记和我需要在页面中显示的特殊字符组成,如果我不给escapexml='false'这些字符和标记不实现。但是,由于代码中有escapexml='false'字符串,这构成了veracode的安全缺陷,因为我在重新扫描文件后发现它。

有谁能建议我摆脱这个泥潭的替代解决方案?

1 个答案:

答案 0 :(得分:0)

你要求的是两件不同的事情。拍摄特殊字符并以可视方式显示给用户是相当简单的。将它们作为标记安全地插入到页面中会更复杂。

视觉显示:

这里你要做的是将浏览器想要解释的特殊字符作为标记并以一种向浏览器指示它应该只显示的方式转义(或编码)它。 Alex建议使用StringEscapeUtils来帮助你做到这一点。 (请记住,每个上下文都有自己的转义规则,因此适用于html的内容不一定适用于css和javascript。)

标记插入:

在这种情况下,您需要对输入进行一些验证,以确保不插入影响页面行为方式的内容。插入一些 ... 标记可能没问题,插入javascript是有风险的。挑战在于捕捉人们可能试图逃避过滤器的所有方式。如果您的网站足够有趣,人们会尝试利用此功能。