带有CSRF令牌的Laravel API请求

时间:2019-02-05 17:17:31

标签: php jquery laravel api csrf

我正在使用Laravel框架创建网站,在这里我使用jQuery而不是Vue。而且我想知道哪种方法最适合在已经登录后安全地执行发布请求时使用。

我当前正在使用Laravel的默认身份验证和网络/路由在登录时显示正确的视图。

现在为了获得更流畅的用户体验,我想使用jQuery POST请求而不是提交表单,这样我就可以检索JSON并进行必要的更改而无需重新加载网站。

对JWT和OAuth2有一定的经验,但是在这种情况下这真的必要吗?

找到了该线程:https://stackoverflow.com/a/44106621/2906013,这说明由于REST API是无状态的,因此在POST请求头中发送CSRF令牌是不正确的做法。但是在用户登录时已经设置了此状态,所以我不了解这可能对我造成的危害?

这与JWT令牌有何不同?两者都是代表已登录用户的令牌还是我错了(如果我没记错的话,CSRF令牌是Laravel中的会话令牌)?

想要确保网站的安全性,因此非常感谢所有反馈。

1 个答案:

答案 0 :(得分:3)

在我个人看来,这取决于您如何对ajax请求和项目结构进行总体分类。您的项目是否完全宁静?就像所有请求都需要RESTful一样,并且没有直接登录吗?在这种情况下,您的应用程序是无状态的,并且每个请求都需要某种身份验证,这不是通过csrf_token完成的理想方式。

例如,如果您使用第三方API,则实际上从不登录,但使用JWT或OAUTH令牌来确保您的请求得到了验证。

现在,如果您的整个网站基本上都遵循非静态重定向策略并保持会话状态,则它是有状态的。会话是保持其状态的东西。因此,对于简单的表单保存,如果要使用ajax而不是刷新页面,则完全可以发送csrf_token。

在这种情况下,如果是通过refresh-submit或ajax来进行发送,内部laravel不太关心如何发送POST请求。因此,理想的情况是什么都没有改变,只是您将返回json而不是重定向并在javascript中进行处理。

此操作的安全性取决于您在控制器中验证发布请求的方式是否正确,如何确保无效数据不会发送到服务器等。