java - 配置 esapi 缓解 XSS SQLI {GET/POST data} 的完美方法

标签 java jax-rs esapi

我们有一个 jaxrs 服务,不幸的是执行了原始查询,没有准备好的语句。我们使用 ESAPI 来缓解 XSS、SQLI。如下所示:

private String mitigateSQLI(String value) {

        Encoder instance = ESAPI.encoder();
        Codec c = new MySQLCodec(MySQLCodec.Mode.ANSI);

        return instance.encodeForSQL(c, value);
    }

    private String mitigateXSS(String value) {
        if (value == null)
            return null;

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

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

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

        return value;
    }

以及具有默认配置的 ESAPI.properties 文件。

我们仍然在某些场景中面临 SQLI,知道查询是连接和形成的。

想知道是否有最好的方法/配置来缓解这些问题。 Way 可以是 ESAPI 属性或这些 ESAPI 可用方法。

最佳答案

不要逃避其他选择。正如 OWASP 中粗体引用的那样

主要防御:

  • 选项 1:使用准备好的语句(带有参数化查询)
  • 选项 2:使用存储过程
  • 选项 3:白名单输入验证
  • 选项 4:转义所有用户提供的输入

额外防御:

  • 另外:强制执行最低权限
  • 另外:执行白名单输入验证作为辅助防御

根据应用程序需求配置 ESAPI.properties 非常重要。当不使用准备好的语句时,您必须在服务器端转义输入。对于 Java,Apache 的 StringEscapeUtils 可以完成这项工作。

关于java - 配置 esapi 缓解 XSS SQLI {GET/POST data} 的完美方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57611710/

相关文章:

java - 如何在Gradle中订购配置任务的 'running'?

java.io.File.toURI() IO 绑定(bind)?

java - Java 中的数组编程

rest - 对于Java中的RESTful服务,JAX-RS是否比诸如Swing,Grails或Play的MVC框架更好?

java - Jersey :禁止未指定的参数

java - 针对用户提供的 url 属性的 ESAPI XSS 预防

java - RenameTo 似乎随机失败

java - 使用 Jax-RS 发布

java - ESAPI 无法在 JSP 中工作

logging - 需要 OWASP-ESAPI 记录器帮助