在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)。
答案 0 :(得分:0)
考虑到你提到的WS部署的例子:在我看来,在幕后,这个方法将使用Java嵌入式HttpServer(用于管理HTTP请求和对Web服务的HTTP响应)和内部JAX-WS参考实现,也称为Metro。
我不完全确定1.6中使用了哪种JAX-WS RI实现,很可能是同一个Metro。 因此,考虑其安全规范,通过Metro文档获取所需信息将是一个很好的观点。 从我的角度来看,当您需要尽可能快地检查Web服务时,此解决方案有一些测试原因。但这只是我的意见。 一般来说,这种方法也有权在项目中使用。
此外,我没有任何信息是否将OWASP建议包含在相关的JAX-WS规范中。如果他们是,那么Metro可能会开箱即用。