如何使用OWASP检测Java中的XSS

如何使用OWASP检测Java中的XSS,java,security,jsoup,xss,owasp,Java,Security,Jsoup,Xss,Owasp,我现在正在处理这件事,XSS 我需要检测字符串是否包含XSS。为了解决这个问题,我用了这个。这是我正在使用的代码: public static boolean containsXSS(String value) { if (StringUtils.isEmpty(value)) { return false; } String stripXss = stripXSS(value); return !value.equals(stripXss); }

我现在正在处理这件事,XSS

我需要检测字符串是否包含XSS。为了解决这个问题,我用了这个。这是我正在使用的代码:

public static boolean containsXSS(String value) {
    if (StringUtils.isEmpty(value)) {
        return false;
    }
    String stripXss = stripXSS(value);
    return !value.equals(stripXss);
}

public static String stripXSS(String value) {


 if (StringUtils.isBlank(value))
        return value;

    // Use the ESAPI library to avoid encoded attacks.
    Encoder encoder = ESAPI.encoder();
    value = encoder.canonicalize(value);

    // Avoid null characters
    value = value.replaceAll("\0", "");

    // Clean out HTML
    Document.OutputSettings outputSettings = new Document.OutputSettings();
    outputSettings.escapeMode(Entities.EscapeMode.xhtml);
    outputSettings.prettyPrint(false);
    value = Jsoup.clean(value, "", Whitelist.none(), outputSettings);

    return value;
}
使用上面的代码,我确实成功地捕捉到了如下内容:
alert('xss')

我的问题是,我将以下字符串标识为包含XSS,尽管它不是: {“项目”:5}

这是因为jsoup.clean将其转换为
{“item”:5}

我试图解决这个问题,但没有成功。 这让我想知道我的算法是否完全错误(如果是,我在哪里可以找到检测XSS的算法),也许我不需要与原始字符串进行比较

如果你能帮助我,我将非常感激


谢谢

您无法检测字符串是否包含XSS。XSS是输出问题,而不是输入问题。数据在一个上下文中是良性的,在另一个上下文中可能导致恶意行为

  • 使用白名单验证数据,以确保数据在域中有效(数字是数字,名称不包含unwantef字符等)。这将阻止一些但绝对不是所有的攻击

  • 按照OWASP XSS预防备忘单中的说明,对用户提供的输出进行上下文编码

  • 不要混合使用客户端和服务器端模板

  • 在javascript中使用未初始化的数据时要小心(请参阅基于DOM的XSS)


  • 无法检测字符串是否包含XSS。XSS是输出问题,而不是输入问题。数据在一个上下文中是良性的,在另一个上下文中可能导致恶意行为

  • 使用白名单验证数据,以确保数据在域中有效(数字是数字,名称不包含unwantef字符等)。这将阻止一些但绝对不是所有的攻击

  • 按照OWASP XSS预防备忘单中的说明,对用户提供的输出进行上下文编码

  • 不要混合使用客户端和服务器端模板

  • 在javascript中使用未初始化的数据时要小心(请参阅基于DOM的XSS)


  • 您无法“检测字符串是否包含XSS”。正确转义您的输出,XSS将不会成为问题。Owasp提供了消毒器,请使用这些方法如何正确转义?不是有个惯例吗??我应该只使用apache.StringEscapeUtils.escapeHtml吗?您不能“检测字符串是否包含XSS”。正确转义您的输出,XSS将不会成为问题。Owasp提供了消毒器,请使用这些方法如何正确转义?不是有个惯例吗??我应该只使用apache.StringEscapeUtils.escapeHtml吗?包含有关OWASP plus提供的消毒剂的信息链接到您指定的备忘单包含有关OWASP plus提供的消毒剂的信息链接到您指定的备忘单