.net - Web 服务器上禁用的 OPTIONS 标头(.NET Web API 和 Angular)
问题描述
我们公司(以及其他一些公司)保持 PCI 合规性。作为我们最近的安全审计的一部分,我们的基础架构团队和审计员确定 OPTIONS 标头应该被完全禁用,因为它构成了安全威胁。
我们在 Angular 6/7 网站上使用 .NET Web API(在多个子域上)。现在禁用 OPTIONS 标头后,来自 Angular 的预检调用被拒绝,我们的应用程序在第一次 API 调用另一个子域时失败(例如,身份验证,这是我们的第一个功能之一,并且在 auth.mycompany.com 上运行我们的应用程序app.mycompany.com)。
我已经阅读了大量内容(如果有人将其标记为重复,如果它导致解决方案,我会很高兴:))但是,我无法找到任何可行的解决方案。大多数文章都要求将有效的 OPTIONS 调用列入白名单(Why is HTTP Options request insecure和https://security.stackexchange.com/questions/138567/why-should-the-options-method-not-be-allowed-on-an -http-server是两个示例)或在同一子域上设置代理(在 Angular 2 中使用基本身份验证的 Preflight CORS 请求)。
我的问题是,有没有办法配置 OPTIONS 标头,允许我们通过安全扫描并仍然允许来自 Angular 的 CORS 调用?
在此先感谢您的帮助!
解决方案
我们公司(以及其他一些公司)保持 PCI 合规性。作为我们最近的安全审计的一部分,我们的基础架构团队和审计员确定 OPTIONS 标头应该完全禁用,因为它构成了安全威胁。
我同意所有域中所有 OPTIONS 的广泛块是有效的安全默认值,但它们应该允许一些 OPTIONS 请求通过正确的服务器,因为它是 HTTP 规范的一部分。
一些安全团队按照标准做法阻止所有 POST 请求,您必须请求允许哪些 POST 请求进入网络。
我们无法告诉您这是否是一项好政策。
我的问题是,有没有办法配置 OPTIONS 标头,允许我们通过安全扫描并仍然允许来自 Angular 的 CORS 调用?
这是向另一个域发出请求时由 Web 浏览器完成的标准安全检查。这是你无法改变的。
这是您此时的选项列表
- 请求允许有问题的 Web 服务器使用 OPTIONS。告诉安全团队,服务器将被修改以产生本质上严格的 OPTIONS 响应并确保安全。
- 在同一个域上托管 Angular Web 应用程序,这样浏览器就不会发出 OPTIONS 请求。
- 更改所有 API 调用,以便仅向 API 发出没有正文的 GET 请求(空 GET 请求免于 OPTIONS 飞行前请求)。
- 在与 Angular 应用程序相同的域上创建 API 代理,并让代理向其他域发出所有 API 调用(后端服务器不发出 OPTIONS 请求)。
在实施上述任何一项之前,请先咨询您的安全团队。
推荐阅读
- openstack - 资源属性的 Openstack HEAT 条件
- javascript - 更新嵌套数组中的值,同时保持原始索引 ES6
- python - 不同型号的Tensorflow Demo iOS App无法正常工作
- swift - 说类型是非可选的,但打印是可选的
- android - DialogFragment 圆角 - 如何设置透明度
- cakephp-2.0 - 无法访问在控制器中检索到的数组中的数据以显示在视图文件中
- javascript - 如何使用动画将对象水平居中?
- android - 如何使用 androjena 0.5 在 android 中执行 Sparql 查询
- powershell - 使用 Powershell 在远程计算机上编辑注册表项
- c++ - C++20 bit_cast 与 reinterpret_cast