当前端/后端位于两个不同的域时,CSRF 保护如何为我提供比 CORS 控制更高的安全性?

2024-03-29

如果我有:

  • 一个域上的 Web 前端。
  • 另一个域上的 REST API。
  • 通过设置 header 将 REST API 服务器配置为仅允许来自 Web 前端域的跨源请求Access-Control-Allow-Origin到 Web 前端域。

除了需要跨越更多障碍之外,CSRF 还提供哪些额外的安全性?攻击者不能POST到我的后端,而不首先将他们的代码注入到 Web 前端,对吧?

关于这个问题 https://stackoverflow.com/questions/10741339/do-csrf-attack-worries-apply-to-apis,克里斯·帕拉特说,"[...]So, yes, I think as a rule any API view should be CSRF exempt.[...]"。这个概念有效吗?它是否包括我的拓扑?

在我的配置中,正确配置了 CORS,我是否需要装饰GET, POST, PUT, DELETE来自 Web 前端的带有 Cookie 的请求and数据元素 CSRF 令牌?

Meta:
开明的人可能会认为这个问题是重复的,但我已经读过this https://stackoverflow.com/questions/10741339/do-csrf-attack-worries-apply-to-apis, this http://blog.codinghorror.com/preventing-csrf-and-xsrf-attacks/, this https://stackoverflow.com/questions/24680302/csrf-protection-with-cors-origin-header-vs-csrf-token, this https://stackoverflow.com/questions/17507206/how-to-make-a-post-simple-json-using-django-rest-framework-csrf-token-missing-o, this https://docs.djangoproject.com/en/dev/ref/csrf/#ajax, this https://docs.djangoproject.com/en/dev/ref/csrf/, and this https://stackoverflow.com/questions/16501770/csrf-exempt-failure-apiview-csrf-django-rest-framework, 我还需要一些帮助。请帮助我进一步充实这个想法。


在从域加载的页面上下文中,CORS 仅控制浏览器是否可以read来自另一个域的 XHR 响应。它不控制浏览器可以发出请求的域to。也就是说,CORS将放宽同源政策 http://en.wikipedia.org/wiki/Same-origin_policy对于标头设置的任何来源 - 但同源策略中没有任何内容表明不能首先发出请求。

其他域仍然可以 GET 和 POST 到您的域,只是您的站点生成的任何响应都无法在客户端脚本中读取,除非 CORS 允许。实际的 GET 和 POST 仍然由您的服务器接收并处理 https://stackoverflow.com/a/26526630/413180.

因此,您仍然需要 CSRF 预防 - 即使对于使用 CORS 兼容浏览器的用户也是如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

当前端/后端位于两个不同的域时,CSRF 保护如何为我提供比 CORS 控制更高的安全性? 的相关文章

随机推荐

  • 如何使 python 进程以正确的进程名称运行?

    我在 Python 中有一些长期进程和临时进程 虽然 shell 和 C 程序以自己的名称运行 但所有 Python 进程都以 python filename py 运行 这使得识别进程变得困难 如何使 python 进程在 Linux 中
  • Angular:将curl 转换为Angular $http POST 请求

    我有这条卷曲线 curl X POST H content type application json H AUTH TOKEN vLC4grMuKbtbamJL3L6x localhost 8080 v1 segments appkey
  • 使用 NHibernate 查询

    我是 NHibernate 的新手 我正在尝试学习如何查询我的数据 下面是配置 xml 仅显示食谱 我希望能够通过输入的关键字按菜谱标题查询菜谱 还有成分名称中的成分 例如 您可以输入 意大利面酒 这是我尝试过的 但给了我一个错误 hql
  • 如何使用 c 中最少的库跟踪鼠标输入

    我不知道在哪里可以找到这些信息 但我想知道如何使用 c 中最少的非标准库来获取鼠标输入 或任何隐藏输入 基本上 c 中是否有相当于鼠标 和其他输入 输入的 stdio 或者是否有一个最小且在多个平台上交叉兼容的库 只需能够将鼠标坐标打印到终
  • 将对象添加到 NSMutableArray 属性

    这是我的数据结构 group 1 n id name elements 1 n 我为具有所有属性的元素定义一个类 为组定义一个类 如下所示 interface Group NSObject NSInteger groupID NSStrin
  • 如何通过模拟选择器和/或 redux 存储来编写 Redux Saga 测试

    Context 我是编写 Redux Saga 测试的新手 并且一直在使用反应样板 https github com react boilerplate开发一个应用程序 该应用程序使用 Jest 进行测试 样板文件非常模块化且复杂 我什至不
  • 如何学习编写惯用的 C++ 代码 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我最近强迫自己学习 C 并且刚刚读完 Herbert Schildt 所著的 C 完整参考 一书 我喜
  • 在 Rails 中创建博客档案

    控制器 class PostsController lt ApplicationController def index posts Post published respond to do format format html index
  • 您所知道的最难理解的 C++ 代码是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • C++ 标准库函数的函数重载

    我有一个免费的功能作为课程的一部分 在类的构造函数中我正在做一些malloc运营 所以在destructor我正在尝试释放那段记忆 但是 VS10 编译器抱怨说 free pointer 与我的类的自由函数的签名不匹配 所以问题是在一个类中
  • Asp.net 中的异步 Web 服务

    如何在 ASP NET 中设置异步 Web 服务 我想调用网络服务将一些数据发布到数据库 但我不关心响应是失败还是成功 我只能使用 net 2 0或3 5 它可以是vb或c 当您在 Visual Studio 中创建服务引用时 单击 高级
  • 哪些类型可以声明为 const?

    在 C 中 哪些类型可以声明为const const int i 0 const double d 0 const decimal m 0 const referenceType null 有完整的清单可供我参考吗 Well MSDN ht
  • 子目录中的 Ember 组件

    我读到现在支持在 components 中包含目录 文件夹 使用 ember cli 我可以生成所需的必要子目录 组件 但是 我似乎无法引用该组件 例如 如果我有这样的文件夹结构 app components sub test comp j
  • 访问 Angular ui-calendar 中的 fullcalendar 对象

    我正在尝试访问 ui calendar 中的 fullcalendar 对象 文档说我需要做的就是给日历属性一个名称 div 然后 您应该能够像这样访问日历 uiCalendarConfig calendars myCalendar 这对我
  • 在 Mac os x Snow Leopard 上编译 Bochs

    有人能够在 Snow Leopard 下编译 Bochs 模拟器吗 Leopard 对我来说工作得很好 但在 Snow Leopard 下我遇到了很多与 Carbon 库相关的问题 好的 我们要求提供更多信息 我在 shell 上使用 ma
  • INSERT INTO 语句中的情况

    我正在尝试设置ActionReq当未提供 ActionReq 时 将此存储过程的列设置为 Expiration AdvancedCancel 的值 ActionReq和 Expiration 是日期时间 AdvancedCancel 是 i
  • 线程不更新进度条控件 - C#

    我有一个带有自定义进度条的自定义表单 在主类 主线程 中生成 然后我生成一个线程并向其发送 ThreadStart 函数 此线程启动函数应该更新自定义控件中的进度条 但没有 class MyClass Custom form with pr
  • 尝试思考如何在 Angular 2 中构建多步表单

    我正在尝试构建一个小型的三步表单 它会类似于这样 我在 React 中执行此操作的方法是使用 redux 来跟踪表单完成情况并根据步骤号 0 1 2 渲染表单主体标记 在 Angular 2 中 什么是做到这一点的好方法 这就是我目前正在尝
  • 使用 Flexbox 将元素与底部对齐

    我正在尝试使用 Flexbox 将 DIV 与底部对齐align content flex end 并尝试align self flex end 没有运气 我在这里做错了什么 我想align content对齐 好吧 内容到任何允许的高度
  • 当前端/后端位于两个不同的域时,CSRF 保护如何为我提供比 CORS 控制更高的安全性?

    如果我有 一个域上的 Web 前端 另一个域上的 REST API 通过设置 header 将 REST API 服务器配置为仅允许来自 Web 前端域的跨源请求Access Control Allow Origin到 Web 前端域 除了