2011-06-06 62 views
1

我在我的web.xml春季或APP服务器逃生的HTML工作不JAVA MVC

<context-param> 
    <param-name>defaultHtmlEscape</param-name> 
    <param-value>true</param-value> 
    </context-param> 

了这一点,这在JSP

<spring:htmlEscape defaultHtmlEscape="true" /> 

不过我可以把<font color="red">this is red</font>在一个表格中,并在网站上看到红色的文字。

我正在使用EL和Taglibs访问jsps中的变量。例如。 <h3>${someThing.title}</h3>

为什么这不起作用,我该怎么办?包装在一些包装每一个EL表达式腌的代码,很容易出错...

+0

那么为什么这个工作到最后呢? – 2016-07-05 09:46:28

回答

3
<c:out value="${someThing.title}" escapeXml="true"/> 
+1

这就是我不想要的。没有webdesigner可以使用jsps来处理那些东西......如果我忘记把它放在某个地方,那么很容易出现XSS。我想设置一次。 – 2011-06-06 07:35:57

+0

所以也许你可以添加一个过滤器,它可以在将呼叫转发到jsp之前转义所有请求和会话作用域参数 – 2011-06-06 09:39:10

+0

谢谢!这对我的用例非常有用。 – 2014-07-16 23:09:39

3

你应该使用<c:out>逃脱在JSP代码。我可以看到你可能会认为这是臃肿的,但你可以使用标签文件来减少重复。或者,使用EL的fn:escapeXml功能。

+0

这些其他的东西(content-param ...)是无用的吗?如果真的很难做到每一秒都必须容易发生XSS。也许我应该考虑一个新的收入来源:-) – 2011-06-06 07:45:44

+0

是的,这是一种痛苦。请参阅http://stackoverflow.com/questions/2147958/how-do-i-prevent-people-from-doing-xss-in-java。我认为'defaultHtmlEscape'只适用于Spring MVC JSP标记的输出,而不适用于原始EL表达式。 – artbristol 2011-06-06 07:54:57