Повний чекліст для проєктів, які мають бути захищеними з коробки.
| № | Категорія | Рекомендації | Чому це важливо |
|---|---|---|---|
| 1 | HTTP/HTTPS | - Вимагати HTTPS: app.UseHttpsRedirection() + HSTS в production |
Захист від Man-in-the-Middle атак, перехоплення даних |
| 2 | Аутентифікація & Авторизація | - Використовувати ASP.NET Core Identity / OAuth2 / OpenID Connect - Рольова + політика: [Authorize(Policy = "...")] - MFA для критичних дій - Для API: JWT з правильним aud, iss, коротким lifetime |
Запобігання несанкціонованому доступу |
| 3 | Валідація та кодування | - Валідація всіх вхідних даних (моделі, параметри, заголовки) - Атрибути: [Required], [Range], [RegularExpression]- Контекстне кодування виводу (XSS-захист) |
Запобігання ін'єкціям (SQLi, XSS, Command Injection) |
| 4 | CSRF & CORS | - Anti-forgery tokens для форм та cookie-auth - CORS: НЕ AllowAnyOrigin + AllowCredentials |
Захист від CSRF-атак та витоку даних |
| 5 | Cookies & Сесії | - Secure = true- HttpOnly = true- SameSite = Strict або Lax |
Запобігання крадіжці cookie через JS або cross-site |
| 6 | Обробка помилок & Логування | - Не виводити стек-трейси у відповідь - Логувати аномалії, але без секретів |
Запобігання витоку інформації про сервер |
| 7 | Захист даних & Криптографія | - Шифрування чутливих даних - Хешування: bcrypt / Argon2 (не MD5/SHA1) - Ротація ключів, secrets management (vault) |
Захист даних від компрометації |
| 8 | Конфігурація & Middleware | - Правильний порядок: UseRouting → UseAuthentication → UseAuthorization- Без UseDeveloperExceptionPage() в production- Вимкнути зайві middleware |
Зменшення поверхні атаки |
| 9 | Залежності & Пакети | - Регулярно сканувати та оновлювати NuGet - Використовувати Dependabot / Snyk |
Запобігання відомим вразливостям |
| 10 | Моніторинг & Rate Limiting | - Увімкнути Microsoft.AspNetCore.RateLimiting |
Захист від DoS, brute-force, раннє виявлення атак |
| 11 | SSRF & Зовнішні запити | - Allowlist для зовнішніх URL - Перевіряти DNS/URL (не довіряти клієнтським вхідним) |
Запобігання доступу до внутрішніх ресурсів |
// у Program.cs
app.UseHttpsRedirection();
app.UseHsts(); // тільки production
app.UseExceptionHandler("/Error");
app.UseRateLimiter();
app.UseAuthentication();
app.UseAuthorization();