【发布时间】:2015-06-06 06:42:11
【问题描述】:
我正在努力解决我们的代码中的跨站点脚本问题,主要是在 JSPS 中。
以下是原代码
//scriplet code
<% String userId = request.getParameter("sid");
...%>
并且在同一个 Jsp 中
<input type = hidden name = "userID" value = "<%= userId %>" />
我进行了更改,将 esapi-2.1.0.jar 包含在 lib 中,并将 ESAPI.properties、validation.properties 包含在类路径中。然后对脚本代码进行以下更改以修复上述代码
//scriplet code
<% String userId = ESAPI.encoder().encodeForHTML(request.getParameter("sid"));
...%>
我认为这可以解决问题,但是当我使用 Fortify 扫描我的代码时,这些行再次突出显示为存在 XSS 问题。如果你们对如何处理有任何想法,请提供帮助。谢谢。
------- 更新
非常感谢@avgvstvs。这是非常有见地的。遵循指南,不确定我是否错过了一些东西。代码 -
String userSID=ESAPI.encoder().encodeForHTMLAttribute(request.getHeader("janus_sid")); session.setAttribute("username",userSID);<input type=hidden name="USERNAME" value="<%= userSID %>"
对于另一个变量调试,下面是用法
String debugFlag = ESAPI.encoder().encodeForJavaScript(request.getParameter("debug"));var debugFlag = "<%= debugFlag%>";if(debugFlag == "y"){
document.title= title + " (" + host + ")";
defaultAppTitle = title + " (" + host + ")";
}
最新的 Fortify 扫描仍将它们列为漏洞 :-(
【问题讨论】:
-
XSS 验证不佳是中等风险还是严重风险?
-
它属于中等风险,我们正计划消除中等风险。
-
@Eric 我刚刚遵循了备忘单owasp.org/index.php/…,但 Fortify 仍然抱怨 :-(
-
是的,我不确定为什么它不完全支持该编码。您也可以尝试使用 Validator 类中的 getValidHTML。我仍在调查为什么这种编码不受信任,所以我会在有问题时报告。
-
您需要共享使用
userId的代码行。一些扫描工具将针对初始分配而不是风险实际所在的位置。此外,如果要在同一页面上的 javascript 上使用相同的值,这可能是一个 XSS 问题,像 Fortify 这样的工具无法发现,因为它无法在运行时攻击页面。在将目标字段标记为误报之前,您应该使用 ZAP 或 burpsuite 之类的工具对目标字段运行一些 XSS 模糊测试。不过,对于这个问题,我需要更多代码。
标签: java xss fortify cross-site esapi