什么时候用隐藏字段,什么时候用header,为什么?
X-XSRF_TOKEN
我们什么时候用?
X-CSRF TOKEN
我们什么时候用?
最佳答案
所有这些都是为了防止跨站请求伪造,在向后端发送请求时只需要使用其中一个。不同的名称来自不同的框架。
这都是关于发送 csrf value
后端。然后后端会将它与存储在该特定用户的数据库中的 csrf 值进行比较,如果匹配,它将允许处理请求。
csrf :
- 用于 html 表单(不是 ajax)
- 在呈现 html 表单时在后端生成。
- 我们不能直接在html表单中设置请求头,所以一个简单的方法是通过表单输入将其作为隐藏字段发送。
- 你可以随意命名这个隐藏的输入。例如
<input name="my_csrf_input" value="a_hashed_string_the_csrf_value"
x-csrf-token:
- 它被添加到请求 ajax 请求的 header 。
- 要使用它,我们可以将
csrf value
在呈现 html 时在元标记中,然后在前端我们可以从该元标记中获取值并将其发送到后端。
Laravel 特定:
- 使用
laravel
时作为后端。 Laravel 会自动检查此 header 并将其与有效的csrf value
进行比较在数据库中。(laravel 有一个中间件)
x-xsrf-token:
- 它被添加到请求 ajax 请求的 header 。
- angular 和
axios
等热门库, 自动从xsrf-token
获取此 header 的值cookie 并将其放入每个请求 header 中。 - 要使用它,我们应该创建一个名为
xsrf-token
的 cookie在后端,那么我们使用 angular 或 axios 的前端框架将自动使用它。
Laravel 特定:
- 因为它很流行,laravel 在每个响应中创建这个 cookie。
- 所以当你使用例如
axios
或angular
与laravel
,您无需执行任何操作。只需让用户登录,“auth”中间件就会完成这项工作。 - 在 laravel 中,它是一个比
x-csrf-token
更大的字符串因为 cookies 在 laravel 中是加密的。
关于php - X-XSRF-TOKEN 和 X-CSRF-TOKEN 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42408177/