为啥即使未启用 CORS,HTTP 请求也会在 Action 中处理? [复制]

Posted

技术标签:

【中文标题】为啥即使未启用 CORS,HTTP 请求也会在 Action 中处理? [复制]【英文标题】:Why is HTTP request been processed in Action even when CORS is not enabled? [duplicate]为什么即使未启用 CORS,HTTP 请求也会在 Action 中处理? [复制] 【发布时间】:2019-12-04 08:07:53 【问题描述】:

背景:

我的服务器域是www.good.com,并且没有启用CORS 'test' 控制器下有一个 API,动作名称 'hello'(GET 方法),所以端点是 www.good.com/ api/test/你好 有一个模拟恶意网络调用 www.bad.com

场景:

www.bad.comwww.good.com/api/test/hello 发送请求 虽然坏网站在浏览器上看不到响应,但是 'hello' 操作已执行,并返回完整响应。

我的问题是:

如果不允许使用 CORS,为什么 .NET Core 框架仍然让请求进入我的操作并产生结果?如果不允许 CORS 的目的是为了防止跨站请求,那为什么不直接在进入控制器/动作之前阻塞请求,这样我们就可以节省服务器上的资源/性能呢? (因为不是我们需要处理的请求)

1234563这可能是我的操作返回的敏感数据。然后 CORS 什么都没有保护,这对我来说很奇怪。

【问题讨论】:

CORS 是一种客户端(例如浏览器)保护。 【参考方案1】:

据我了解,CORS 并不能真正保护您免受恶意调用。它保护用户免受恶意网站的侵害。

用户使用浏览器。浏览器正在阻止此处的实际调用。

浏览器能够应对跨站点引用并尊重 CORS 标头。通过发出飞行前 optikns 请求,实际呼叫将被阻止。我的猜测是,您的模拟请求中缺少此预检选项请求。

注意:您始终可以使用任何类型的软件发布恶意帖子并执行请求。问题是:用户倾向于使用浏览器。因此,可以创建一个网站,在用户不知情的情况下恶意将数据发布到您的网站。

或者正如wikipedia 所说:

虽然服务器可以执行一些验证和授权,但通常浏览器有责任支持这些标头并遵守它们施加的限制。


因此得出结论:我认为它不会开箱即用地检查原点,并且;我不知道你模拟设置的细节,但它似乎不是一个实际的浏览器调用。 ....如果是...那就很有趣了;请显示模拟呼叫?

【讨论】:

以上是关于为啥即使未启用 CORS,HTTP 请求也会在 Action 中处理? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

即使在配置 ASP.NET Core Web API 中启用了 CORS,CORS 也会阻止发布请求

跨域请求被阻止:即使在我的 API 上启用了 CORS 后也会发生;

即使启用了通过 JavaScript 加载的图像,也会向我抛出 CORS 错误

即使未加载 codeigniter 会话库,也会在数据库中创建新的会话条目。为啥?

即使启用了 CORS,POST 也会被阻止

为 Firebase 云功能启用 Cors