有 CORS 还需要 CSRF token 吗?

176 天前
 yodhcn

在现代浏览器环境,要防范 CSRF ,检查 origin 头就足够了吧?还需要 CSRF token 吗?

2462 次点击
所在节点    程序员
10 条回复
GeekGao
176 天前
首先要明确 CSRF token 的定义:它是一个在服务器端生成并在客户端(通常是通过 HTTP cookie 或 HTML 表单)携带的随机值。当服务器接收到一个请求时,它会检查请求中的 token 是否与服务器保存的 token 匹配。由于这个 token 是在用户登录时生成的,攻击者无法预知其值,因此无法构造有效的 CSRF 攻击

其次要知道 Origin 头是可以被篡改的,而且还有非浏览器环境是可以不遵守同样的 Origin 头规则。

结论,就是依然有必要。
keakon
176 天前
这 2 者作用不一样啊,CORS 是跨域的安全设置,你没跨域使用 xhr 、fetch 时不受影响。
yodhcn
176 天前
@GeekGao 但是,非浏览器环境 CSRF token 也同样没用啊?可以通过请求直接拿到 CSRF token 与 cookie
GeekGao
176 天前
@yodhcn 怎么没用,为何一定用 cookie ? 选择使用其他方式来传递 CSRF 令牌啊:HTTP Header 、URL 参数、Request Body
wonderfulcxm
176 天前
@yodhcn csrf 不是防模拟提交的
zjsxwc
175 天前
GPT:在不跨域且 CORS 限制有效的情况下,如果网站本身存在 XSS (跨站脚本)漏洞,攻击者就有可能利用这个漏洞来注入恶意脚本,从而在合法的页面中执行恶意操作。
例如,如果网站的某个输入框没有对用户输入的内容进行充分的过滤和验证,攻击者可以在输入框中提交一段恶意的 JavaScript 代码。当其他用户访问包含这个输入内容的页面时,浏览器会执行这段恶意代码,从而实现诸如窃取用户会话信息、篡改页面内容、发送非法请求等恶意行为。
所以,即使在同一域名下,如果存在 XSS 漏洞,只要 CORS ,不做 CSRF 防护也可能被攻击。
AloneHero
175 天前
楼上是不是没明白楼主的问题,明显楼主想问只依靠 CORS 机制加检查 origin 的情况下能否防得住 CSRF 。结果不明所以的乱答一堆,然后没由来的得出一个结论。。。
hugepizza
175 天前
不一定要 CSRF token, CSRF 本意就是跨站请求攻击,都不允许跨站了还怎么跨站攻击
至于非浏览器环境怎么样 那就不是防 CSRF 的讨论范围了 honojs 那个本质就是过滤 origin
accelerator1
175 天前
CSRF (跨站点请求伪造)能实施主要依靠两点,1:请求参数可预测,2:身份鉴权信息自动携带。
第 1 点的防范主要靠表单中添加服务端生成的随机参数,第 2 点主要靠 cookie 的自动发送实现,防范手段就是将认证信息由 cookie 传输改为 header 传输,header 只能代码添加到请求中。

CORS (跨源资源共享),用于跳过浏览器对跨域请求的限制。

两者有什么关联关系。
wtfedc
175 天前
没有其他 xss 漏洞的情况下,其实同源策略是可以预防 CSRF 的。在 xss 漏洞存在的情况下,你在 malicious.site 加载一个 iframe 访问 normal.site ,脚本拿 cookie 构造请求,这种情况下,如果有 CSRF Token ,是可以预防的。

常规做法就是 CSRF Token + samesite cookie 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1054508

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX