【问题标题】:How do I store SOAP responses in the database securely?如何将 SOAP 响应安全地存储在数据库中?
【发布时间】:2014-07-14 03:41:21
【问题描述】:

我正在开发一个内部工具,该工具可以模拟我们产品使用的不同 Web 服务的 SOAP 响应。这旨在用于本地开发。

这个想法是将 SOAP 响应作为 blob 数据存储在数据库中。在将 URL 键映射到响应期间,URL 键和预期的 SOAP 响应将存储到数据库中。模拟的 SOAP 响应将作为 POST 请求中的字符串正文。

SOAP 响应将与 URL 键一起作为 blob 存储在数据库中。如果 URL 为/configureresponse/{responsetype}/{responsecode}/,则响应类型和响应代码的值将与 SOAP 响应一起作为字符串保存到数据库中。

我正在为此构建一个 Spring MVC 应用程序。下面给出代码sn-p

@Controller
@RequestMapping(value = "/configureresponse/{responsetype}/{responsecode}",
                method = RequestMethod.POST)
public ModelAndView configureResponse(
        @PathVariable String responseType, @PathVariable String responseCode,
        @RequestBody String soapResponse) {

}
  1. 如何根据特定条件返回 200 OK 或 403 Forbidden 等 Servlet 响应?

  2. 有没有办法保护传入的 XML 响应和传出的 XML 响应?这是一个内部工具,但我不确定如何处理 XML 注入或任何其他安全问题。

更新:如何保护应用程序免受十亿笑攻击或更安全?

  1. 我应该检查 XSRF 漏洞吗?如果是,我该怎么做?

  2. 如何处理同一响应和请求的同时并发输入?

更新:我如何检查一个线程是否正在更新给定响应类型和响应代码的响应,而另一个线程正在查看给定响应类型和响应代码的响应?

【问题讨论】:

    标签: java security spring-mvc soap spring-security


    【解决方案1】:
    1. 如何根据特定条件返回 200 OK 或 403 Forbidden 等 Servlet 响应?

    有几种方法可以做到这一点。例如,您可以将返回类型更改为ResponseEntity<String>,它有一个接受HttpStatus 的构造函数。或者,您可以简单地传入一个 HttpServletResponse 并在那里设置响应代码。了解 Spring,可能还有 20 多种有效的方法可以做到这一点。我建议阅读他们网站上提供的优秀参考指南。

    1. 有没有办法保护传入的 XML 响应和传出的 XML 响应?这是一个内部工具,但我不确定如何处理 XML 注入或任何其他安全问题。

    不确定您所说的“安全”是什么意思。如果您的意思是传输,请使用 SSL。如果您的意思是授权/身份验证,请使用 Spring Security。如果你的意思是别的,那么我不知道该提供什么,只是说我需要更好地解释你想要/需要什么。

    1. 我应该检查 XSRF 漏洞吗?如果是,我该怎么做?欢迎提供任何链接或教程。

    无论是内部应用还是外部应用,安全都应该是一个问题。现在大多数黑客都是通过社会工程进入公司的内部网络来完成的。以最近的 Target 违规为例。我相信他们使用空调维修服务进入大楼。有一次我参加了 Schmoocon 的演讲,一个受雇测试公司安全的人实际上得到了一份看门人的工作,他会插入他制造的 Linux 设备,去拖地板,然后拿起扫描了所有内部设备的设备网络。所以,是的,如果你认为你应该防范攻击,那么我会说这样做。

    1. 如何处理同一响应和请求的同时并发输入?

    不确定你的意思。 Spring MVC 通常使用 session 来隔离请求。如果两个不同的用户请求同一个东西,那么他们就是对同一个东西的两个不同的请求。我建议使用一些缓存,这样你就不会每次都访问你的数据库,但除此之外我认为没有问题。

    【讨论】:

    • 通过保护,我的意思是保护免受“Billion Laughs 攻击”或任何其他 XML 注入尝试。我将编辑我的问题以进一步澄清。任何有关处理 SOAP 请求的 CSRF 的教程?如何处理相同资源的并发更新?或在更新另一个进程时读取。
    • 在您的解释中,这听起来不像您正在处理任何 XML,只是存储请求/响应对。除非您正在解析 XML,否则它只是一个文本文档。如果您正在解析它(或者它正在外部解析),我相信防止它的常用方法是限制可以扩展的字节数。如何执行此操作取决于您使用的 XML 解析器。
    • 至于 CSRF 预防,这看起来很有希望:java.dzone.com/articles/preventing-csrf-java-web-apps
    • 最后,对于并发修改,我建议设置一种锁定机制,以便一次只有一个人可以修改。如果这不令人满意,那么您可能希望让用户修改副本,然后将副本合并。另一种选择是进行双向同步,但我认为这真的很难得到对。
    • 关于您对 XML 响应的第一个评论,我正在考虑使用 JAXB 解析器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    • 2017-05-26
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    相关资源
    最近更新 更多