【ASP.NET Core Web】レスポンスヘッダーを追加してXSS対策する

ネコニウム研究所

PCを利用したモノづくりに関連する情報や超個人的なナレッジを掲載するブログ

【ASP.NET Core Web】レスポンスヘッダーを追加してXSS対策する

2024-3-11 |

.NET 8のASP.NET Core Webでレスポンスヘッダーを追加してXSS対策したい!

概要

今回の記事では、.NET 8のASP.NET Core Webでレスポンスヘッダーを追加してXSS対策する手順を掲載する。

XSSとは、サイトに不正なスクリプトを挿入されて不正に操作されてしまう脆弱性の問題。
XSS対策としてレスポンスヘッダーを追加する。

仕様書

環境

  • .NET 8.0

手順書

ASP.NET Core Webでレスポンスヘッダーを追加するにはアクションにFilterを追加して、アクションの実行時にXSS対策のレスポンスヘッダーを追加する。

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc.Filters;

namespace XssProtectionSample.Filters
{
    public class AddXssProtectionHeaderFilter : IAsyncResultFilter
    {
        public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
        {
            var headers = context.HttpContext.Response.Headers;
            headers.Append("X-Frame-Options", "DENY");
            headers.Append("X-XSS-Protection", "1; mode=block");
            headers.Append("X-Content-Type-Options", "nosniff");

            await next();
        }
    }
}

コントローラーに先程のフィルターを設定する例。

```cs
using XssProtectionSample.Mvc.Filters;

namespace XssProtectionSample.Controllers
{
    [TypeFilter(typeof(AddXssProtectionHeaderFilter))]
    public class SampleController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }

        ...
    }
}

追加した3つのレスポンスヘッダーについて簡単に説明する。

headers.Append("X-Frame-Options", "DENY");

FRAMEタグで埋め込まれることを禁止する。ユーザーが気づきにくい感じ(例えばほとんど見えないくらい小さいサイズのFRAMEタグなど)で悪意のあるスクリプトのあるページを読み込ませないための対策。

headers.Append("X-XSS-Protection", "1; mode=block");

1にすることでXSSフィルタリングが有効になる。

headers.Append("X-Content-Type-Options", "nosniff");

IEの脆弱性対策。

まとめ(感想文)

セキュリティって大事。