遵循OWASP建议,以Java安全简单的JAX-WS Web服务

时间:2018-06-07 14:27:50

标签: java xml security soap jax-ws

在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)。

1 个答案:

答案 0 :(得分:0)

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

Metro's page on GitHub

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

此外,我没有任何信息是否将OWASP建议包含在相关的JAX-WS规范中。如果他们是,那么Metro可能会开箱即用。