配置 CORS 网页后返回错误但也有结果

Posted

技术标签:

【中文标题】配置 CORS 网页后返回错误但也有结果【英文标题】:After configuring CORS webpage returns error but also results 【发布时间】:2019-09-24 20:56:30 【问题描述】:

我正在创建一个简单的 ASP.NET 后端,我需要启用 CORS 以仅将我的网站(请求来自该网站)列入白名单,而它应该无法从任何其他来源访问。我已经像下图那样做到了(老实说,我尝试了我所知道的所有其他方式但没有成功),我所取得的成就是,在发出任何请求(GET、PUT、POST ...)时,我总是没有遇到任何问题列入白名单的网站(这很好),但我也得到了其他来源的响应,而我在浏览器控制台上只有一个 CORS 通用错误(我重复一遍,在收到错误时我也得到了答案,这是我不想要的)。 我该怎么办?

提前致谢,

马特奥

 public class Startup
 
    public Startup(IHostingEnvironment configuration)
    
        Configuration = configuration;
    

    public IHostingEnvironment Configuration  get; 

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    


        services.AddCors(options =>
        
            options.AddPolicy("AllowMyOrigin",
            builder => builder.WithOrigins("https://myclient"));
        );
        services.Configure<CookiePolicyOptions>(options =>
        
            // This lambda determines whether user consent for non-essential cookies is needed for a given request.
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        );

        services.AddEntityFrameworkSqlite()
            .AddDbContext<WebApiContext>(options => options.UseSqlite($"Data Source=Configuration.WebRootPath/tutoriel.db"));            

        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
        services.Configure<MvcOptions>(options =>
        
            options.Filters.Add(new CorsAuthorizationFilterFactory("AllowMyOrigin"));
        ); //Imposta il cors su tutto il progetto (resource: DZone)
    

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    

        if (env.IsDevelopment())
        
            app.UseDeveloperExceptionPage();
        
        else
        
            app.UseExceptionHandler("/Home/Error");
            // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
            app.UseHsts();
        
        app.UseCors("AllowMyOrigin");
        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseAuthentication();
        app.UseMvc(routes =>
        
            routes.MapRoute(
                name: "default",
                template: "controller=Home/action=Index/id?");


        );
    

错误:

Object  headers: …, status: 0, statusText: "Unknown Error", url: "https://mysite", ok: false, name: "HttpErrorResponse", message: "Http failure response for https://mysite: 0 Unknown Error", error: error 
core.js:15724

警告:

跨域读取阻塞 (CORB) 阻止了跨域响应 https://mysite,MIME 类型为 application/json。看 https://www.chromestatus.com/feature/5629709824032768 了解更多 详情。

授权站点请求错误

但 Json 结果显示

"id":"w.paciaroni","luogo":"giappone","disponibilita":false

【问题讨论】:

尝试 http://myclient 而不是 https。然后根据需要使用 https 调用 API。 【参考方案1】:

我重复一遍,在得到错误的同时我也得到了答案

这是预期的行为。 CORS 是一种浏览器安全功能。它旨在保护用户(而不是您的服务器)免受跨站点脚本攻击。

我不想要的

然后你必须在服务器上实现它。最简单的方法是编写一个中间件或一个 ActionFilter 来检查请求的 Origin 标头。如果它与您允许的任何来源都不匹配,则返回错误响应(我建议错误状态412 Precondition Failed)。

安全说明:攻击者可以轻松欺骗 Origin 标头,因此这只会 阻止最愚蠢的黑客访问您的网页。

【讨论】:

以上是关于配置 CORS 网页后返回错误但也有结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 CorsRegistry/@CrossOrigin 配置 Spring 后仍然出现 CORS 错误 [关闭]

使用反应返回 405 错误获取快速后端(来自原点'null'已被 CORS 策略阻止:对预检等的响应......)

网页503错误

使用 .NET Core 和 Angular 客户端启用 CORS 错误后,它仍然会发生

为啥一些跨域 XMLHttpRequest 请求不返回 CORS 错误

达到速率限制时收到 CORS 错误而不是预期的 429 响应