我使用过滤器通过编码我的jsp表单参数的html字符来阻止xss。
我使用$ {param}表达式在jsp中解析它们。
这在tomcat中运行正常,因为值按原样解析,但在weblogic上,值被解码,导致XSS成功
我在jsp中使用这个简单的代码来测试它
<c:set var="testing" value="eb011"><img src=a onerror=confirm(1)>47379"/>
<input type="hidden" name="encoding" value="${testing }"/>
结果是tomcat
<input type="hidden" onerror="confirm(1)>47379"/" src="a" ><img="" value="eb011" name="encoding">
结果是weblogic
<input type="hidden" value="eb011" name="encoding"><img onerror="confirm(1)" src="a">47379"/>
请告诉我为什么weblogic解码HTML代码以及可以采取哪些措施来阻止它。
答案 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) + "!");