我试图在我的Web应用程序中使用OWASP ESAPI库来转义JSP中的请求参数,如下面的ESAPI.encoder().encodeForHTML(request.getParameter()).
我在WEB-INF/lib下添加了esapi-2.1.0.jar,但是我得到了以下异常
org.owasp.esapi.errors.ConfigurationException:无法以任何方式加载ESAPI.properties.失败.org.owasp.esapi.reference.DefaultSecurityConfiguration.loadConfiguration(DefaultSecurityConfiguration.java:439)
但我无法在JAR文件中找到ESAPI.properties.知道我能在哪里得到这个吗?我还应该在哪里放置这个属性文件?请帮忙.
我正在我们的代码中主要在JSPS中修复跨站点脚本问题.
以下是原始代码
//scriplet code
<% String userId = request.getParameter("sid");
...%>
Run Code Online (Sandbox Code Playgroud)
他们拥有相同的Jsp
<input type = hidden name = "userID" value = "<%= userId %>" />
Run Code Online (Sandbox Code Playgroud)
我已经进行了更改,在lib和ESAPI.properties中包含esapi-2.1.0.jar,在classpath中包含validation.properties.然后在下面更改scriplet代码以修复上面的代码
//scriplet code
<% String userId = ESAPI.encoder().encodeForHTML(request.getParameter("sid"));
...%>
Run Code Online (Sandbox Code Playgroud)
我认为这可以解决问题但是当我使用Fortify扫描我的代码时,这些行再次突出显示为有XSS问题.如果你们对如何处理这个问题有任何想法,请帮忙.谢谢.
-------更新
非常感谢@avgvstvs.这是非常有见地的.Follwd指导方针,不确定我是不是很想念.代码 -
String userSID=ESAPI.encoder().encodeForHTMLAttribute(request.getHeader("janus_sid")); session.setAttribute("username",userSID);<input type=hidden name="USERNAME" value="<%= userSID %>"
Run Code Online (Sandbox Code Playgroud)
对于另一个varibale调试,下面是用法
String debugFlag = ESAPI.encoder().encodeForJavaScript(request.getParameter("debug"));var debugFlag = "<%= debugFlag%>";if(debugFlag == "y"){
document.title= title + " (" + host + ")";
defaultAppTitle = title + " (" + host + ")";
}
Run Code Online (Sandbox Code Playgroud)
最新的Fortify扫描仍然将它们列为漏洞:-(