↩️ На главную

Топ-5 дыр в PHP-движках: как не превратить свой блог в ботнет

10.12.2025 | Статья из категории: Создание сайтов

Топ-5 дыр в PHP-движках: как не превратить свой блог в ботнет

Пишете свой движок для блога? Отлично. Но даже «простой вывод статей» может стать воротами для взлома — если допустить типичные ошибки. Вот что ломают первым делом.

1. SQL-инъекции — классика, но не умерла

Если вы вставляете данные из URL или форм прямо в SQL-запрос — вы уже уязвимы.

Опасно:
$id = $_GET['id'];
$query = "SELECT * FROM posts WHERE id = $id"; // 💀 Взлом через ?id=1 OR 1=1
$result = mysqli_query($conn, $query);
Безопасно:
$id = (int)$_GET['id']; // Приведение к числу — для ID
// ИЛИ
$stmt = $pdo->prepare("SELECT * FROM posts WHERE id = ?");
$stmt->execute([$_GET['id']]);
$post = $stmt->fetch();

2. Локальный файловый инклуд (LFI)

Динамический include по параметру из URL — верный путь к чтению любых файлов на сервере.

Опасно:
include($_GET['page'] . '.php');

→ Запрос ?page=../../../etc/passwd может вывести системные файлы.

Безопасно:
$allowed = ['home', 'about', 'contact'];
$page = $_GET['page'] ?? 'home';
if (in_array($page, $allowed)) {
    include($page . '.php');
} else {
    include('404.php');
}

3. XSS — когда ваш блог крадёт куки посетителей

Если вы выводите данные пользователя (заголовки, комментарии, даже URL) без экранирования — вы даёте атакующему внедрить JS.

Опасно:
<h1><?= $_GET['title'] ?>  </h1>

?title=<script>stealCookies()</script>

Безопасно:
<h1><?= htmlspecialchars($_GET['title'], ENT_QUOTES, 'UTF-8') ?>  </h1>

4. Использование опасных функций

Даже один eval(), system() или file_get_contents() с пользовательским вводом — это «открой замок и зайди».

Опасно:
eval($_POST['code']); // 💀 Прямой удалённый запуск кода

**Правило:** никогда не передавайте пользовательские данные в функции, которые выполняют код или обращаются к ФС без жёсткой валидации.

5. Отсутствие защиты сессий (если есть авторизация)

Если вы добавите админку «потом», помните:

  • Всегда используйте session_regenerate_id() после входа;
  • Устанавливайте флаги: session.cookie_httponly = 1, session.cookie_samesite = 'Strict';
  • Храните в сессии не «is_admin = true», а ID пользователя + проверяйте его в БД при каждом запросе.

Заключение

Самописный движок — не приговор к уязвимостям. Главное: → Никогда не доверяйте входным данным. → Экранируйте всё, что выводите. → Не выполняйте ничего, что пришло от пользователя. → И не бойтесь публиковать код — настоящая безопасность в качестве, а не в тайне.

Проверили свой код? Отлично. Теперь можно делиться — и не бояться, что «доброта» обернётся взломом.




Категории:

Категории

Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

← Назад к списку статей

Посетителей сегодня: 0
о блоге | карта блога

© Digital Specialist | Не являемся сотрудниками Google, Яндекса и NASA