< Summary

Information
Class: OzonOrdersWeb.Extensions.SecurityExtensions
Assembly: OzonOrdersWeb
File(s): /home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Extensions/SecurityExtensions.cs
Line coverage
0%
Covered lines: 0
Uncovered lines: 31
Coverable lines: 31
Total lines: 67
Line coverage: 0%
Branch coverage
0%
Covered branches: 0
Total branches: 6
Branch coverage: 0%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
AddSecurityServices(...)0%2040%
UseSecurityMiddleware(...)0%620%

File(s)

/home/runner/work/Studio2Prod/Studio2Prod/OzonOrdersWeb/Extensions/SecurityExtensions.cs

#LineLine coverage
 1using Microsoft.AspNetCore.Builder;
 2using Microsoft.AspNetCore.Http;
 3using Microsoft.AspNetCore.RateLimiting;
 4using Microsoft.Extensions.DependencyInjection;
 5using OzonOrdersWeb.Middleware;
 6
 7namespace OzonOrdersWeb.Extensions;
 8
 9public static class SecurityExtensions
 10{
 11    /// <summary>
 12    /// Добавляет сервисы безопасности
 13    /// </summary>
 14    public static IServiceCollection AddSecurityServices(this IServiceCollection services, bool isProd)
 15    {
 16        // Настройка HSTS (HTTP Strict Transport Security)
 017        services.AddHsts(options =>
 018        {
 019            options.Preload = true;
 020            options.IncludeSubDomains = true;
 021            options.MaxAge = TimeSpan.FromDays(365); // 1 год
 022        });
 23
 24        // Настройка Cookie безопасности
 025        services.ConfigureApplicationCookie(options =>
 026        {
 027            options.Cookie.HttpOnly = true; // Защита от XSS
 028            options.Cookie.SecurePolicy = isProd
 029                ? CookieSecurePolicy.Always // В production только HTTPS
 030                : CookieSecurePolicy.SameAsRequest; // В development разрешаем HTTP
 031            options.Cookie.SameSite = SameSiteMode.Strict; // Защита от CSRF
 032            options.SlidingExpiration = true; // Обновление срока действия
 033            options.ExpireTimeSpan = TimeSpan.FromHours(8); // Срок действия 8 часов
 034        });
 35
 36        // Настройка Session Cookie
 037        services.AddSession(options =>
 038        {
 039            options.Cookie.HttpOnly = true;
 040            options.Cookie.SecurePolicy = isProd
 041                ? CookieSecurePolicy.Always
 042                : CookieSecurePolicy.SameAsRequest;
 043            options.Cookie.SameSite = SameSiteMode.Strict;
 044            options.IdleTimeout = TimeSpan.FromMinutes(30);
 045            options.Cookie.IsEssential = true;
 046        });
 47
 048        return services;
 49    }
 50
 51    /// <summary>
 52    /// Настраивает middleware безопасности
 53    /// </summary>
 54    public static IApplicationBuilder UseSecurityMiddleware(this IApplicationBuilder app, bool isProd)
 55    {
 56        // HSTS должен быть первым
 057        if (isProd)
 58        {
 059            app.UseHsts();
 60        }
 61
 62        // Security Headers Middleware
 063        app.UseMiddleware<SecurityHeadersMiddleware>();
 64
 065        return app;
 66    }
 67}