Spring 在JSP中,如何首先为JavaScript转义字符串值,然后为HTML转义字符串值?
在一个使用JSP和Spring的项目中,最简单的方法是先对JavaScript转义EL表达式值,然后对HTML转义EL表达式值 想象一下这种用法:Spring 在JSP中,如何首先为JavaScript转义字符串值,然后为HTML转义字符串值?,spring,jsp,escaping,xss,Spring,Jsp,Escaping,Xss,在一个使用JSP和Spring的项目中,最简单的方法是先对JavaScript转义EL表达式值,然后对HTML转义EL表达式值 想象一下这种用法: <a onclick='alert("${note}");'>Foo</a> Foo 这容易受到XSS或普通语法错误的影响,因为变量值可以包含引号、小于和其他字符 我想到的是: <a onclick='alert("<c:out value="${null}" ><s:escapeBody html
<a onclick='alert("${note}");'>Foo</a>
Foo
这容易受到XSS或普通语法错误的影响,因为变量值可以包含引号、小于和其他字符
我想到的是:
<a onclick='alert("<c:out value="${null}"
><s:escapeBody htmlEscape="false" javaScriptEscape="true"
>${variable}</s:escapeBody></c:out>");'>Foo</a>
<!-- this escapes first the inner tags body for JS,
then c:out uses that (because its value attribute
is null, it uses what is in its own body) and
escapes it for HTML/XML -->
Foo
它相当笨拙,所以我正在寻找一种更优雅的方式
(请注意,仅使用
是不正确的,因为标记首先转义为HTML,然后转义为JS,因此,例如,它将在a“b
的值上失败)为了避免产生笨拙的代码,我建议您创建一个小型自定义标记库,它提供了一个函数,您可以通过在commons-lang中使用来轻松实现
然后你可以写:
<a onclick='alert("${foo:escapeJsHtml(note)}");'>Foo</a>
Foo
为了避免产生笨拙的代码,我建议您创建一个小型自定义标记库,它提供了一个功能,您可以通过在commons-lang中使用来轻松实现
然后你可以写:
<a onclick='alert("${foo:escapeJsHtml(note)}");'>Foo</a>
Foo
StringEscapeUtils方法escapeHtml3(或4)在这里会非常失败,因为它不会逃逸撇号字符。但是escapeEcmaScript会逃逸。不相关。结果是:)将使您的解决方案有效。好的;那么写…
就足够了,以避免“丑陋”,对吗?StringEscapeEeutils方法escapeHtml3(或4)在这里会非常失败,因为它不会逃逸撇号字符。但是escapeEcmaScript会逃逸。不相关。结果是:)将使您的解决方案有效。好吧;那么写…
就足够了,以避免“丑陋”,对吗?@BalusC假设的副本询问关于逃逸JS的问题,这里的问题是关于HTML和JS。这里的答案可以用作这里答案的一部分。@BalusC假设的副本询问关于转义JS的问题,这里的问题是关于HTML和JS的。这里的答案可以用作这里答案的一部分。