Files
vtuber-awards/Backend/Security/SecurityHeadersMiddleware.cs

36 lines
1.3 KiB
C#

namespace Backend.Security;
public sealed class SecurityHeadersMiddleware(RequestDelegate next)
{
public async Task InvokeAsync(HttpContext context)
{
context.Response.OnStarting(() =>
{
var headers = context.Response.Headers;
headers["X-Content-Type-Options"] = "nosniff";
headers["X-Frame-Options"] = "DENY";
headers["Referrer-Policy"] = "strict-origin-when-cross-origin";
headers["Permissions-Policy"] = "camera=(), microphone=(), geolocation=()";
headers["Cross-Origin-Opener-Policy"] = "same-origin";
if (!headers.ContainsKey("Content-Security-Policy"))
{
headers["Content-Security-Policy"] =
"default-src 'self'; " +
"img-src 'self' data: https:; " +
"font-src 'self' https://fonts.gstatic.com data:; " +
"style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; " +
"script-src 'self'; " +
"connect-src 'self' https:; " +
"frame-ancestors 'none'; " +
"base-uri 'self'; " +
"form-action 'self';";
}
return Task.CompletedTask;
});
await next(context);
}
}