< Summary

Information
Class: OzonOrdersWeb.Middleware.SecurityHeadersMiddleware
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Middleware/SecurityHeadersMiddleware.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 22
Coverable lines: 22
Total lines: 47
Line coverage: 0%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%210%
InvokeAsync()100%210%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Middleware/SecurityHeadersMiddleware.cs

#LineLine coverage
 1namespace OzonOrdersWeb.Middleware;
 2
 3/// <summary>
 4/// Middleware для добавления заголовков безопасности HTTP
 5/// </summary>
 6public class SecurityHeadersMiddleware
 7{
 8    private readonly RequestDelegate _next;
 9    private readonly IWebHostEnvironment _environment;
 10
 011    public SecurityHeadersMiddleware(RequestDelegate next, IWebHostEnvironment environment)
 12    {
 013        _next = next;
 014        _environment = environment;
 015    }
 16
 17    public async Task InvokeAsync(HttpContext context)
 18    {
 19        // Добавляем заголовки безопасности
 020        context.Response.Headers.Append("X-Content-Type-Options", "nosniff");
 021        context.Response.Headers.Append("X-Frame-Options", "DENY");
 022        context.Response.Headers.Append("X-XSS-Protection", "1; mode=block");
 023        context.Response.Headers.Append("Referrer-Policy", "strict-origin-when-cross-origin");
 24
 25        // Content Security Policy
 026        var csp = "default-src 'self'; " +
 027                  "script-src 'self' 'unsafe-inline' 'unsafe-eval' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com
 028                  "style-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com https://code.j
 029                  "img-src 'self' data: https:; " +
 030                  "font-src 'self' https://cdn.jsdelivr.net https://cdnjs.cloudflare.com data:; " +
 031                  "connect-src 'self' https:; " +
 032                  "frame-ancestors 'none';";
 33
 034        context.Response.Headers.Append("Content-Security-Policy", csp);
 35
 36        // Permissions Policy (бывший Feature-Policy)
 037        context.Response.Headers.Append("Permissions-Policy",
 038            "geolocation=(), microphone=(), camera=(), payment=(), usb=(), magnetometer=(), gyroscope=(), speaker=()");
 39
 40        // Удаляем заголовок Server для сокрытия информации о сервере
 041        context.Response.Headers.Remove("Server");
 042        context.Response.Headers.Remove("X-Powered-By");
 43
 044        await _next(context);
 045    }
 46}
 47