[eggjs/egg]csrf设置 x-csrf-token之后,post 可以正常拦截,但是get为何不能拦截

2024-08-05 468 views
1

在配置中设置如下 security: { csrf: { headerName: 'x-csrf-token', }, },

页面api 通过post方式提交,可以进行拦截,但是get方式api拦截不了,header中没有 x-csrf-token,还是可以正常访问?

请问下大家谁遇到过这个问题?如何解决的?

回答

9

GET 不用拦截吧。

正常 post 请求会带上 csrf token,也是先在 GET 时从 ctx 拿到(token 每次都不一样),再在后续 post 请求中带上。

如果 GET 也拦截,那需要一个"创世token"。

6

@Jeff-Tian get请求为啥不用?爬虫很容易就爬走了。。。虽然预防攻击或者爬虫不能单靠这个,但是我的疑问是post可以,为啥get不行。。。。同样在header中存储的

6

csrf 是防跨站点攻击,不是防爬的。可以去了解下对应的概念。

8

@atian25 嗯,说的很有道理,但是 我就是想问下 headerName: 'x-csrf-token' 不支持 get吗?只支持 post吗?

7

需要自己实现,可以写个中间件验证header 中的token

6

@Jeff-Tian 嗯,好的,谢谢,原理都知道,就是想着,要是支持,就不自己写了

3

这个实现原理无法防止爬虫,爬虫可以伪造 cookie