我遇到了同样的问题。我们有很多 jsp 页面(超过 10000 个页面,非常庞大的项目),因此您知道当您执行以下操作时可能会发生 XSS 攻击漏洞:
<div><%=someValue%></div>
所以这里有两种选择:
1) 使用来自 jsp 的 <c:out> 标签,确保我们不会发生 XSS 攻击。像这样的:
<div><c:out value="<%=someValue%>" /></div>
将其应用于所有 200 页并不难。
2) 编写一些java代码来检查该值是否具有XSS volnerability。
您可能会从这样的 Java 类中获得 someValue:
String someValue = MyClass.getSomeValue();
所以在getSomeValue 方法中你应该检查一些模式。
我为 XSS 检测编写了一些 Java 模式,并在这里为您带来:
private static Pattern[] patterns = new Pattern[]{
// Script fragments
Pattern.compile("<script>(.*?)</script>", Pattern.CASE_INSENSITIVE),
// src='...'
Pattern.compile("src[\r\n]*=[\r\n]*\\\'(.*?)\\\'", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
// lonely script tags
Pattern.compile("</script>", Pattern.CASE_INSENSITIVE),
Pattern.compile("<script(.*?)>", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
// eval(...)
Pattern.compile("eval\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
// expression(...)
Pattern.compile("expression\\((.*?)\\)", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL),
// javascript:...
Pattern.compile("javascript:", Pattern.CASE_INSENSITIVE),
// vbscript:...
Pattern.compile("vbscript:", Pattern.CASE_INSENSITIVE),
// onload(...)=...
Pattern.compile("onload(.*?)=", Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL)
};
public static Boolean strongCheckForXSS(String input) {
if (input == null)
return false;
for (Pattern p : patterns)
if (p.matcher(input).find())
return true;
return false;
}