有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何使用OWASP在Java中检测XSS的安全性

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

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

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;
}

使用上面的代码,我确实成功地捕获了如下内容:<script>alert('xss')</script>

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

这是因为jsoup。clean将其转换为{&quot;item&quot; :5}

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

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

谢谢


共 (1) 个答案

  1. # 1 楼答案

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

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

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

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

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