我正在开发一个 jsp/servlet 应用程序,现在的要求是应用跨站点脚本,因为它是一个包含大约 200 个 jsp 页面的巨大应用程序,并且需要对每个 jsp 页面进行编码,所以我正在寻找一个有效的方法来做到这一点,从而减少工作量,比如我们可以在 Servlet 过滤器中做到这一点,或者一个好的框架来实现这一点。
任何帮助,将不胜感激。
我正在开发一个 jsp/servlet 应用程序,现在的要求是应用跨站点脚本,因为它是一个包含大约 200 个 jsp 页面的巨大应用程序,并且需要对每个 jsp 页面进行编码,所以我正在寻找一个有效的方法来做到这一点,从而减少工作量,比如我们可以在 Servlet 过滤器中做到这一点,或者一个好的框架来实现这一点。
任何帮助,将不胜感激。
我有同样的问题。我们有很多 jsp 页面(超过 10000 个页面,非常庞大的项目),因此您知道当您执行以下操作时可能会发生 XSS 攻击漏洞:
<div><%=someValue%></div>
所以我们这里有两个选择:
1)使用<c:out>
来自 jsp 的标签来确保我们不会发生 XSS 攻击。像这样的东西:
<div><c:out value="<%=someValue%>" /></div>
将其应用于所有 200 页并不难。
2)编写一些java代码来检查该值是否具有XSS volnerability。您可能会someValue
从这样的 Java 类中获得:
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;
}