【发布时间】:2018-06-07 14:27:49
【问题描述】:
在 Java 1.6+ 中,提供 JAX-WS 2.0 SOAP Web 服务很简单,即使没有外部库:
或多或少:我们用@WebService 注释服务接口和类,将@WebParam 添加到提供的方法的参数中,调用Endpoint.publish 和我们去吧!我什至不必为 JAXB 注释输入或输出数据类。
但是提供这样的网络服务有多安全?
我指的不是业务视图(是否允许用户访问某个记录,如何实现基于角色的访问控制等),而是基础架构方面,尤其是关于 XML 处理。
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