Laravel的CSRF令牌有哪些替代品?

时间:2016-10-28 04:29:17

标签: javascript php laravel security

对于使用Laravel控制器的非基于PHP的Web客户端(JSON); Laravel中用于保护Web请求的CSRF令牌的潜在替代方案是什么?

2 个答案:

答案 0 :(得分:0)

如果您的API使用的身份验证方案不依赖于浏览器自动发送的身份验证令牌(这实际上意味着令牌或会话ID不在Cookie中),那么您的API不容易受到CSRF的攻击。这包括基于令牌的身份验证,除非令牌存储在cookie中。

如果使用cookie来传递身份验证令牌(包括会话ID,在这方面是相同的),则需要对所有更改服务器状态的请求(主要是数据,但也包括登录状态或权限级别)进行CSRF保护

对于Laravel,您需要将XSRF-TOKEN cookie中的标记值作为X-CSRF-TOKEN中的请求标头值传递。使用jQuery,通过读取cookie值并将其添加到请求,可以在任何客户端框架中轻松完成:

$.ajaxSetup({
  headers: {
    'X-CSRF-TOKEN': csrfCookieValue
  }
});

如果您的客户端不是基于浏览器的,则可以实现与Laravel中的保护不同的保护。 OWASP对您的选项有cheat sheet,可能双提交是最容易实施的,同时相当安全。在非常短的时间内,您创建一个随机令牌并将其作为cookie发送到服务器,也作为请求头,服务器只比较两者(cookie和头)是否匹配。这是有效的,因为由于浏览器中的原始策略相同,不同来源(域)上的攻击者无法为应用程序源设置或访问cookie。

答案 1 :(得分:0)

我认为使用csrf token的重点是在应用内部使用。如果您是通过应用程序本身的ajax发送请求,那么您只需将csrf_token附加到请求即可。但是,如果您通过json从外部来源发送数据,那么最好的方法是使用oAuth来保护对您的API的访问权限。幸运的是,laravel已经使用laravel/passport构建了这个功能,因此实现它非常简单。