Weblogic xss漏洞:在jsp中解码的html字符实体

时间:2014-05-12 07:36:14

标签: java jsp java-ee weblogic xss

使用过滤器通过编码我的jsp表单参数的html字符来阻止xss。

我使用$ {param}表达式在jsp中解析它们。

这在tomcat中运行正常,因为值按原样解析,但在weblogic上,值被解码,导致XSS成功

我在jsp中使用这个简单的代码来测试它

<c:set var="testing" value="eb011&quot;&gt;&lt;img src=a onerror=confirm(1)&gt;47379"/>
<input type="hidden" name="encoding" value="${testing }"/>

结果是tomcat

<input type="hidden" onerror="confirm(1)&gt;47379&quot;/" src="a" &gt;&lt;img="" value="eb011" name="encoding">

结果是weblogic

<input type="hidden" value="eb011" name="encoding"><img onerror="confirm(1)" src="a">47379"/&gt;

请告诉我为什么weblogic解码HTML代码以及可以采取哪些措施来阻止它。

1 个答案:

答案 0 :(得分:1)

我一生中从未使用过weblogic,但我对XSS知之甚少。在做了一些谷歌之后我发现了以下方法来编码weblogic中的html实体。我想这会帮到你。

  

WebLogic Server提供weblogic.servlet.security.Utils.encodeXSS()方法来替换用户提供的数据中的特殊字符。要使用此方法,请提供用户提供的数据作为输入。例如
  <%= weblogic.servlet.security.Utils.encodeXSS( javax.servlet.ServletRequest.getParameter("userInput"))%>

来自:Oracle docs

  

WebLogic Server提供weblogic.servlet.security.Utils.encodeXSS()方法来替换用户提供的数据中的特殊字符。
out.print(defaultGreeting + " " + weblogic.security.servlet.encodeXSS(name) + "!");

来自:Using a WebLogic Server Utility Method