【问题标题】:Efficient way to apply xss crosssite scripting for encoding jsp/servlet application应用 xss 跨站点脚本来编码 jsp/servlet 应用程序的有效方法
【发布时间】:2019-11-13 06:35:30
【问题描述】:

我正在开发一个 jsp/servlet 应用程序,现在的要求是应用跨站脚本,因为它是一个包含大约 200 个 jsp 页面的巨大应用程序,并且需要对每个 jsp 页面进行编码,所以我寻找一种有效的方法来做到这一点,以减少工作量,比如我们可以在 Servlet 过滤器中做到这一点,或者一个好的框架来实现这一点。

任何帮助将不胜感激。

【问题讨论】:

  • 这能回答你的问题吗? XSS prevention in JSP/Servlet web application
  • 嗨乔纳森,这个链接实际上是在解释如何实现 xss,但我正在寻找一种通用的解决方案,我不想在每个 jsp 中实现它。

标签: java jsp servlets xss validationframework


【解决方案1】:

我遇到了同样的问题。我们有很多 jsp 页面(超过 10000 个页面,非常庞大的项目),因此您知道当您执行以下操作时可能会发生 XSS 攻击漏洞:

<div><%=someValue%></div>

所以这里有两种选择:

1) 使用来自 jsp 的 &lt;c:out&gt; 标签,确保我们不会发生 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;
}

【讨论】:

  • 感谢您的回答,那么市场上有没有可用的框架来实现这一点。
猜你喜欢
  • 2011-02-09
  • 1970-01-01
  • 2014-05-07
  • 2022-10-06
  • 2019-09-14
  • 1970-01-01
相关资源
最近更新 更多