在 ASP.Net 和 ASP.Net 核心中禁用 Access-Control-Allow-Origin

Disable Access-Control-Allow-Origin in ASP.Net and ASP.Net Core

我们刚刚进行了外部笔测试,我们所有的网站都返回了一个低警告,说明我们允许跨站点脚本。 我认为实际情况并非如此,因为我们必须特别允许它在一个特定站点的一页上才能正常工作。

报告显示,当调用我们的 URL 时,Access-Control-Allow-Origin 的 header 设置为 *。 使用 Postman 我可以获得相同的结果。

这从 ASP.Net 网络表单应用程序和新的 ASP.Net 6 Razor 页面应用程序返回相同的结果。 有什么办法可以删除这个 header 吗? 也许是 IIS 中的某些东西?

要摆脱它,您必须列出所有允许将请求发送到您的端点的来源。如果您是 运行 ASP.NET 核心应用程序,那么您必须像这样配置 CORS 中间件:

// Startup.ConfigureServices() method

// For example only, put these values in the appsettings.json so they could be overridden if you need it
var corsAllowAnyOrigin = false;
var corsAllowOrigins = new string[]{ "https://*.contoso.com", "https://api.contoso.com" };

// Configuring CORS module
services.AddCors(options =>
{
    options.AddDefaultPolicy(
        builder =>
        {
            if (apiConfiguration.CorsAllowAnyOrigin)
            {
                builder.AllowAnyOrigin();
            }
            else
            {
                builder.WithOrigins(apiConfiguration.CorsAllowOrigins);
            }

            builder.AllowAnyHeader();
            builder.AllowAnyMethod();
        });
});

对于您的 Web 窗体应用程序,您可以安装 IIS CORS 模块并在 web.config 文件中配置它,如下所示:

<?xml version="1.0"?>
<configuration>
  <system.webServer>
    <cors enabled="true">
      <add origin="*" allowed="false"/>
      <add origin="https://*.contoso.com" allowCredentials="false" />
      <add origin="https://api.contoso.com" allowCredentials="true" />
    </cors>
  </system.webServer>
</configuration>