Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 在JSP中,如何首先为JavaScript转义字符串值,然后为HTML转义字符串值?_Spring_Jsp_Escaping_Xss - Fatal编程技术网

Spring 在JSP中,如何首先为JavaScript转义字符串值,然后为HTML转义字符串值?

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

在一个使用JSP和Spring的项目中,最简单的方法是先对JavaScript转义EL表达式值,然后对HTML转义EL表达式值

想象一下这种用法:

<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的。这里的答案可以用作这里答案的一部分。