【问题标题】:Secure simple JAX-WS web service in Java, following OWASP recommendations遵循 OWASP 建议,在 Java 中保护简单的 JAX-WS Web 服务
【发布时间】:2018-06-07 14:27:49
【问题描述】:

在 Java 1.6+ 中,提供 JAX-WS 2.0 SOAP Web 服务很简单,即使没有外部库:

或多或少:我们用@WebService 注释服务接口和类,将@WebParam 添加到提供的方法的参数中,调用Endpoint.publish我们去吧!我什至不必为 JAXB 注释输入或输出数据类。

但是提供这样的网络服务有多安全?

我指的不是业务视图(是否允许用户访问某个记录,如何实现基于角色的访问控制等),而是基础架构方面,尤其是关于 XML 处理。

例如OWASP recommends:

Web 服务必须根据关联的 XML 架构定义 (XSD) 验证 SOAP 有效负载。

我必须手动执行此操作吗? JDK 中包含的默认 JAX-WS 2.0 实现会为我做到这一点吗?我是否必须使用配置、注释等来启用它?

此外,OWASP 建议:

  • 针对格式错误的 XML 实体进行验证
  • 验证 XML Bomb 攻击
  • 验证外部实体攻击

如果我按照开头所述的方式提供服务,我是否需要采取额外措施来防止外部实体攻击?还是针对 XML 反序列化攻击(“ysoserial”和类似的东西)? XML 炸弹/DoS?

您是否知道OWASP Web Service Cheat Sheet 的扩展,而不是解释如何在使用 Java 1.6+ 标准功能范围提供的简单 Web 服务中实施建议?

出于安全考虑,我们假设使用的是 Java 8 的最新补丁版本。我对 Java 1.6 的引用是指SOAP web service "out-of-the-box" capabilities introduced in that version(包括 RI,无需自定义提供的 JAR)。

【问题讨论】:

    标签: java xml security soap jax-ws


    【解决方案1】:

    考虑到您提到的 WS 部署示例:在我看来,在幕后,此方法将使用 Java 嵌入式 HttpServer(管理来自/来自您的 Web 服务的 HTTP 请求和 HTTP 响应)和内部JAX-WS 参考实现,也称为 Metro。

    Metro's page on GitHub

    我不确定 1.6 中使用了哪种 JAX-WS RI 实现,很可能是同一个 Metro。 因此,考虑到它的安全规范,浏览 Metro 文档以获取所需信息将是一个好点。 从我的角度来看,当您需要尽可能快地检查您的 Web 服务时,出于某些测试原因,此解决方案是很好的。但这只是我的意见。 一般来说,这种方法也有权在项目中使用。

    我也不知道 OWASP 建议是否包含在相关的 JAX-WS 规范中。如果是,那么 Metro 可能开箱即用。

    【讨论】:

      猜你喜欢
      • 2015-10-16
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多