java - 如何使用 OWASP 检测 Java 中的 XSS

标签 java security jsoup xss owasp

我现在正在处理这个问题,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的算法),也许我不需要与原始字符串进行比较?

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

谢谢

最佳答案

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

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

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

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

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

关于java - 如何使用 OWASP 检测 Java 中的 XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45824398/

相关文章:

node.js - Express JS - 检测计算机机器人、垃圾邮件

java - 从 Citrix session 中运行的 Java 应用程序,如何知道客户端工作站是否空闲?

javascript - ADF 根据 OutputText 值显示图像

java - 人们去哪里获取安全警报通知?

sql-server - Azure SQL 数据库中没有服务器证书信任

java - 如何避免在 Jsoup 解析中包围 html head 标签

java - 为什么 jsoup 删除内联样式表?

java - 使用Jsoup提取数据

java - 解释 vs. 编译 vs. 后期绑定(bind)

java - Camera2 API 触摸对焦