ajax - CSRF 使用 AJAX。为什么有可能?
问题描述
重现步骤:
- 转到https://stackoverflow.com/
- 在 Web 浏览器中打开开发者控制台
执行以下JS代码:
fetch(`https://webhook.site/5a6f8001-3646-4b3e-bd76-a4562af5a9ef`, { credentials: 'include' })
- 转到https://webhook.site/#!/5a6f8001-3646-4b3e-bd76-a4562af5a9ef
您应该在https://webhook.site上看到 HTTP 请求
为什么 HTTP 请求会到达服务器?这是否违反同源政策?
解决方案
首先,不要混用 SOP、CORS 和 CSRF。
SOP(同源策略)检查由浏览器执行,有助于保护从“其他”源访问的源中的资源。如果需要允许他们阅读您的内容,您需要定义规则以扩展到称为CORS的限制。
CSRF(跨站请求伪造)是一种通过受害者的 cookie 帮助创建或发送恶意无效请求的攻击。使用受害者的 cookie 到达目标源后的每个请求都将通过该用户的许可执行。因此,攻击者不会读取响应。此外,由于Same Origin Policy规则,您无法读取响应,除非它们不允许使用CORS 规则读取其内容。
推荐阅读
- python - 使用 ManyToManyField 的序列化模型缺少数据
- jquery - 如何重新加载侧边栏中显示的 PartialView?
- winapi - Windows API 的完整在线文档在哪里?
- cocos2d-x - 空的 cocos2D-x 项目太大
- javascript - 在 Ionic 框架中使用电子邮件发送附件
- typescript - 从移动应用程序中提取设备信息
- arrays - 如何为复杂的 JSON 数组应用 if-else
- ruby-on-rails - Rails、Chartkick 和 Blazer
- javascript - 成功函数为clld时如何动态滚动ol到底部?
- unit-testing - 从基于 .NET 4.7.1 的 C# 测试项目中定位 .NET Core 2.0.1 Web 项目