【问题标题】:How to handle CSRF protection with Spring RESTful web services?如何使用 Spring RESTful Web 服务处理 CSRF 保护?
【发布时间】:2016-01-12 13:22:38
【问题描述】:

我有一个启用 CSRF 保护的 Spring Web 应用程序。我可以通过 AJAX 调用访问 RESTful 服务,但是当我使用 httpurlconnection 等其他应用程序访问该服务时,我收到 401 错误(CSRF 令牌为空)。

我知道要访问 RESTful 服务,我需要在请求标头中传递一个令牌,但我怎样才能获得 CSRF 令牌?

【问题讨论】:

    标签: spring rest spring-mvc spring-security csrf


    【解决方案1】:

    您可以在 Spring MVC 中创建一个获取 CSRF 令牌的映射:

    @RequestMapping(value="/csrf-token", method=RequestMethod.GET)
    public @ResponseBody String getCsrfToken(HttpServletRequest request) {
        CsrfToken token = (CsrfToken)request.getAttribute(CsrfToken.class.getName());
        return token.getToken();
    }
    

    【讨论】:

    • 我将它添加到我的 Spring 后端,我可以得到一个 csrf-token。现在的问题是......我如何将它传递回我的 Spring POST/PUT web 服务?我宁愿不将我的 JSON 数据的这一部分发回。我非常乐意将令牌放在请求头中或作为 cookie 的一部分。
    • @tjholmes66 您可以在名为X-CSRF-TOKEN 的标头中发送令牌。
    • 是的。谢谢。我现在想通了。谢谢!
    • 我相信您的回答基本上破坏了 CSRF 保护。它使攻击者可以通过执行 get 请求随意获取 CSRF 令牌。
    • @UMad 只要执行同源策略应该没问题。
    猜你喜欢
    • 2011-06-16
    • 1970-01-01
    • 2014-03-04
    • 2011-08-29
    • 1970-01-01
    • 2014-09-13
    • 2013-12-29
    • 2012-01-17
    • 2015-07-08
    相关资源
    最近更新 更多