ASP.Net Core 1.1 - CSP проекта Angular2 не работает

На данный момент я использую пакет nuget NWebsec.AspNetCore.Middleware для реализации заголовков CSP. При простом создании нового приложения ASP.NET Core 1.1 MVC и изменении запуска следующим образом по-прежнему можно внедрить скрипт через консоль. Что мне не хватает?

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            .AddEnvironmentVariables();
        Configuration = builder.Build();
    }

    public IConfigurationRoot Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        // Add framework services.
        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

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

        app.UseCsp(csp =>
        {
            csp.DefaultSources(src => src.Self());
        });
    }
}

Цель состоит в том, чтобы установить безопасность CSP для статических файлов, сгенерированных Angular2 (WebPack). Но CSP, похоже, не применяется.


person Dennis Schiepers    schedule 07.08.2017    source источник


Ответы (1)


ПО промежуточного слоя запускается сверху вниз, это означает, что если ПО промежуточного слоя завершится раньше, то ПО промежуточного слоя, зарегистрированное позже в конвейере, не запустится.

Например, промежуточное ПО для статических файлов обычно настраивается перед промежуточным ПО MVC. Таким образом, приложение сначала попытается найти статический файл, соответствующий текущему запросу, и обслужит его напрямую (что пропустит MVC). Только когда файла нет, он вернется к поиску маршрута MVC.

В конечном счете это означает, что все, что существует для защиты данных или блокировки пользователей от выполнения запросов с помощью «настоящего» промежуточного программного обеспечения (тех, которые фактически возвращают данные), должно быть зарегистрировано в начале конвейера.

В вашем случае вам нужно убедиться, что вы вызываете UseCsp() до UseMvc, чтобы убедиться, что промежуточное ПО CSP запускается перед промежуточным ПО MVC.

person poke    schedule 04.09.2017