2017-08-07 7 views
0

現在、私はCSPヘッダーを実装するためにNWebsec.AspNetCore.Middleware Nugetパッケージを使用しています。単純に新しいASP.NET Core 1.1 MVCアプリケーションを作成し、それに続いて起動を変更すると、コンソールからスクリプトを挿入することは可能です。私は何が欠けていますか?ASP.Net Core 1.1 - Angular2プロジェクトCSPが動作しない

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()); 
     }); 
    } 
} 

Angular2で生成された静的ファイル(WebPack)にCSPセキュリティを設定します。しかし、CSPは適用されていないようです。

答えて

1

ミドルウェアは上から下に実行されます。つまり、ミドルウェアが早期に終了すると、後でパイプラインに登録されたミドルウェアは実行されません。

たとえば、通常は、静的ファイルミドルウェアをMVCミドルウェアの前に設定します。そうすれば、アプリケーションは最初のは、現在の要求と一致する静的ファイルを見つけて直接提供します(MVCをスキップします)。ファイルがない場合のみ、MVCルートルックアップに戻ります。

これは、実際にミドルウェア(実際に物を返すもの)でリクエストを完了させるために、物事を保護したり、ユーザーをロックしたりするすべてのものが、パイプラインの始めに登録されなければならないということを意味します。あなたのケースでは

、あなたはCSPミドルウェアはMVCミドルウェアの前に実行されることを確認するUseMvcUseCsp()を呼び出すことを確認する必要があります。

関連する問題