在现代浏览器环境,要防范 CSRF ,检查 origin 头就足够了吧?还需要 CSRF token 吗?
![]() |
1
GeekGao 66 天前
首先要明确 CSRF token 的定义:它是一个在服务器端生成并在客户端(通常是通过 HTTP cookie 或 HTML 表单)携带的随机值。当服务器接收到一个请求时,它会检查请求中的 token 是否与服务器保存的 token 匹配。由于这个 token 是在用户登录时生成的,攻击者无法预知其值,因此无法构造有效的 CSRF 攻击
其次要知道 Origin 头是可以被篡改的,而且还有非浏览器环境是可以不遵守同样的 Origin 头规则。 结论,就是依然有必要。 |
![]() |
2
keakon 66 天前 ![]() 这 2 者作用不一样啊,CORS 是跨域的安全设置,你没跨域使用 xhr 、fetch 时不受影响。
|
![]() |
5
wonderfulcxm 66 天前 via iPhone
@yodhcn csrf 不是防模拟提交的
|
![]() |
6
zjsxwc 66 天前
GPT:在不跨域且 CORS 限制有效的情况下,如果网站本身存在 XSS (跨站脚本)漏洞,攻击者就有可能利用这个漏洞来注入恶意脚本,从而在合法的页面中执行恶意操作。
例如,如果网站的某个输入框没有对用户输入的内容进行充分的过滤和验证,攻击者可以在输入框中提交一段恶意的 JavaScript 代码。当其他用户访问包含这个输入内容的页面时,浏览器会执行这段恶意代码,从而实现诸如窃取用户会话信息、篡改页面内容、发送非法请求等恶意行为。 所以,即使在同一域名下,如果存在 XSS 漏洞,只要 CORS ,不做 CSRF 防护也可能被攻击。 |
![]() |
7
AloneHero 66 天前 via Android
楼上是不是没明白楼主的问题,明显楼主想问只依靠 CORS 机制加检查 origin 的情况下能否防得住 CSRF 。结果不明所以的乱答一堆,然后没由来的得出一个结论。。。
|
![]() |
8
hugepizza 66 天前
不一定要 CSRF token, CSRF 本意就是跨站请求攻击,都不允许跨站了还怎么跨站攻击
至于非浏览器环境怎么样 那就不是防 CSRF 的讨论范围了 honojs 那个本质就是过滤 origin |
9
accelerator1 65 天前
CSRF (跨站点请求伪造)能实施主要依靠两点,1:请求参数可预测,2:身份鉴权信息自动携带。
第 1 点的防范主要靠表单中添加服务端生成的随机参数,第 2 点主要靠 cookie 的自动发送实现,防范手段就是将认证信息由 cookie 传输改为 header 传输,header 只能代码添加到请求中。 CORS (跨源资源共享),用于跳过浏览器对跨域请求的限制。 两者有什么关联关系。 |
![]() |
10
wtfedc 65 天前
没有其他 xss 漏洞的情况下,其实同源策略是可以预防 CSRF 的。在 xss 漏洞存在的情况下,你在 malicious.site 加载一个 iframe 访问 normal.site ,脚本拿 cookie 构造请求,这种情况下,如果有 CSRF Token ,是可以预防的。
常规做法就是 CSRF Token + samesite cookie 。 |