Безопасность PHP-сайта: чеклист из 8 пунктов

Kuznya Studio 18.09.2026 1

Безопасность сайта — это не одна кнопка, а 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-файл вместо картинки — получает доступ к серверу.

Защита: многоуровневая проверка.

  1. Проверка расширения (только jpg, png, webp, gif)
  2. Проверка MIME-типа через finfo
  3. Проверка содержимого через getimagesize
  4. Сохранение под своим именем

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 уровней из коробки.