Безопасность сайта — это не одна кнопка, а 8 уровней защиты. Каждый закрывает свою угрозу. Разберу по пунктам.
1. SQL-инъекции
Угроза: через форму злоумышленник передаёт SQL-код, который выполняется в базе.
Защита: только prepared statements. Никаких конкатенаций строк.
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([$id]);
PDO с ATTR_EMULATE_PREPARES = false — единственный безопасный способ.
2. XSS (Cross-Site Scripting)
Угроза: пользователь вставляет скрипт в поле — этот скрипт выполнится у других посетителей.
Защита: экранирование вывода + HTMLPurifier для rich-text полей.
// Для простого текста echo htmlspecialchars($user_text, ENT_QUOTES); // Для HTML-контента (статьи) $clean = sanitizeHtml($user_html);
3. CSRF (Cross-Site Request Forgery)
Угроза: злоумышленник создаёт страницу с формой, которая отправляет запрос от твоего имени. Ты открыл её — браузер отправил запрос с твоей сессией.
Защита: токен в каждой форме + проверка на сервере.
4. Брутфорс
Угроза: бот перебирает пароли от админки.
Защита: лимит попыток + бан IP.
- 3 неудачных попытки с IP → бан на 24 часа
- 3 неудачных попытки с логина → бан логина на 1 час
- Все попытки логируются (IP, User-Agent, время)
5. Загрузка файлов
Угроза: злоумышленник загружает .php-файл вместо картинки — получает доступ к серверу.
Защита: многоуровневая проверка.
- Проверка расширения (только jpg, png, webp, gif)
- Проверка MIME-типа через finfo
- Проверка содержимого через getimagesize
- Сохранение под своим именем
6. Session hijacking
Угроза: злоумышленник крадёт cookie сессии и действует от имени пользователя.
Защита: cookie-флаги — secure, httponly, samesite. Плюс regenerate_id после входа.
7. Открытые папки и файлы
Угроза: злоумышленник заходит на /logs/errors.log и видит пути, креды, IP.
Защита: .htaccess с Require all denied на служебные папки: logs, backups, cache, vendor, includes, migrations, updates, sections, themes, modules.
8. Заголовки безопасности
Угроза: разные типы атак через браузер (кликджекинг, MIME-сниффинг).
Защита: HTTP-заголовки HSTS, X-Frame-Options, X-Content-Type-Options, Referrer-Policy, Permissions-Policy.
Ещё немного паранойи
- Cloudflare — прячет IP сервера, даёт DDoS-защиту и WAF
- 2FA — даже с паролем злоумышленник не зайдёт
- Регулярные бэкапы — если что-то сломали, откат за 5 минут
- Мониторинг логов — видеть, кто и что пытается делать
Правило
Безопасность — это не одна кнопка. Это 8 слоёв, каждый из которых блокирует свой тип угрозы. Kuznya CMS включает все 8 уровней из коробки.