セキュリティの設定
以下の目的で、 Program.cs 上で HTTP レスポンスヘッダーを設定します。
Program.cs が冗長になることを防止するため、ミドルウェア を作成します。
セキュリティ設定を HTTP レスポンスヘッダーに設定するミドルウェア
| HttpSecurityHeadersMiddleware.cs |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 | using Microsoft.AspNetCore.Http;
namespace Dressca.Web.Extensions;
/// <summary>
/// HTTP レスポンスヘッダーにセキュリティ関連の設定を追加するミドルウェアです。
/// </summary>
public class HttpSecurityHeadersMiddleware
{
private readonly RequestDelegate next;
/// <summary>
/// <see cref="HttpSecurityHeadersMiddleware"/> クラスの新しいインスタンスを生成します。
/// </summary>
/// <param name="next">HTTP 要求を処理できる delegate</param>
public HttpSecurityHeadersMiddleware(RequestDelegate next)
{
this.next = next;
}
/// <summary>
/// <see cref="HttpSecurityHeadersMiddleware"/> のメイン ロジックを実行します。
/// </summary>
/// <param name="context">HTTP コンテキスト</param>
/// <returns>パイプラインの次の処理</returns>
public async Task InvokeAsync(HttpContext context)
{
context.Response.OnStarting(() =>
{
// コンテンツタイプを誤認識しないよう、HTTPレスポンスヘッダに「X-Content-Type-Options: nosniff」の設定を追加
context.Response.Headers["X-Content-Type-Options"] = "nosniff";
// クリックジャッキング攻撃への対策として、HTTP レスポンスヘッダに、「Content-Security-Policy」を「frame-ancestors 'none'」に設定
context.Response.Headers.ContentSecurityPolicy = "frame-ancestors 'none'";
// レガシーブラウザー向けのクリックジャッキング攻撃への対策として、HTTP レスポンスヘッダに、「X-FRAME-OPTIONS」を「DENY」に設定
context.Response.Headers["X-Frame-Options"] = "DENY";
return Task.CompletedTask;
});
await this.next(context);
}
}
|
| HttpSecurityHeadersMiddlewareExtensions.cs |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | using Microsoft.AspNetCore.Builder;
namespace Dressca.Web.Extensions;
/// <summary>
/// <see cref="IApplicationBuilder"/> の拡張メソッドを提供します。
/// </summary>
public static class HttpSecurityHeadersMiddlewareExtensions
{
/// <summary>
/// <see cref="HttpSecurityHeadersMiddleware"/> を使用します。
/// </summary>
/// <param name="builder">アプリケーションの要求(HTTP リクエスト)処理パイプラインを構成(設定)するための仕組みを提供するクラス</param>
/// <returns><see cref="IApplicationBuilder"/> のインスタンス</returns>
public static IApplicationBuilder UseSecuritySettings(this IApplicationBuilder builder)
{
return builder.UseMiddleware<HttpSecurityHeadersMiddleware>();
}
}
|
作成したミドルウェアを Program.cs から呼び出します。
Program.cs での呼び出し
| Program.cs |
|---|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | using Dressca.Web.Extensions; // その他の using は省略
var builder = WebApplication.CreateBuilder(args);
// 省略
var app = builder.Build();
// 静的ファイル(js/css/画像など)に対するレスポンスでも設定を有効にするため、 app.UseStaticFiles の前に呼び出す
app.UseSecuritySettings();
app.UseStaticFiles();
// その他のミドルウェアの使用は省略
app.Run();
|
HTTP レスポンスヘッダーが以下のように設定されます。
