繁体   English   中英

没有 jsp 的 csrf 令牌(spring mvc)

[英]csrf token without jsp (spring mvc)

我在 Spring 安全配置中启用了 csrf 令牌。 但是移动设备如何接收 csrf 令牌? 当我有 jsp 时,它看起来像:

<input type='hidden' name='${_csrf.parameterName}' value='${_csrf.token}'/>

但是现在我没有 jsp... 那么有什么方法可以手动发送 csrf 吗?

一种流行的做法是对过滤器进行编码,以将令牌作为cookie附加。 然后,您的客户端首先发送GET请求以获取该Cookie。 对于后续请求,该Cookie然后作为标头发送回。

您可以查看官方的Spring Angular指南 ,并参考Spring Lemon的源代码以获取详细的实现。

您可以实施无状态CSRF保护。 Robbert van Waveren很好地解释了一种解决方案即让客户端在Cookie和自定义HTTP标头中生成并发送相同的唯一秘密值

考虑到仅允许网站为其自己的域读取/写入Cookie,因此只有真实网站才能在两个标头中发送相同的值。 使用这种方法,您的服务器要做的就是在每个请求无状态的基础上检查两个值是否相等!

您可以通过查看_csrf属性来获取它。

import javax.servlet.http.HttpServletRequest;
import org.springframework.security.web.csrf.CsrfToken;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/csrf_token")
public class CsrfTokenController {
    @GetMapping
    public String getToken(HttpServletRequest request) {
        CsrfToken token = (CsrfToken) request.getAttribute("_csrf");

        return token.getToken();
    }
}

如果启用了CSRF,则必须在要登录或注销的页面中包含_csrf.token。 否则,登录和注销功能都将失败。

请参阅此以获得更多帮助。

编辑:您可以从请求中获取csrf令牌,并根据需要发送它。 我共享了两个有关CSRF令牌的参考,请仔细阅读它们。 它会帮助你。

第一参考
第二参考

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM