Вы пишете на PHP и думаете, что ваш сайт в безопасности? А что, если я скажу, что одна маленькая ошибка может открыть дверь хакерам? В этой статье мы разберём две самые популярные атаки на PHP-приложения: SQL-инъекции и XSS. Вы узнаете, как они работают и как от них защититься.
SQL-инъекции: когда запросы становятся оружием
SQL-инъекция — это когда злоумышленник вставляет свой SQL-код в запрос через пользовательский ввод. Представьте, что вы оставили ключи от квартиры в двери. Пример уязвимого кода:
$id = $_GET['id'];
$query = "SELECT * FROM users WHERE id = $id";
$result = mysqli_query($conn, $query);
Если пользователь передаст 1 OR 1=1, запрос вернёт всех пользователей. А если 1; DROP TABLE users; --, вы потеряете данные. Как защититься? Используйте подготовленные выражения (prepared statements).
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
Подготовленные выражения отделяют код от данных, поэтому инъекция невозможна. Также всегда проверяйте типы данных и используйте белый список для допустимых значений.
XSS-атаки: когда ваш сайт атакует пользователя
XSS (Cross-Site Scripting) — это внедрение вредоносного JavaScript-кода на страницу, который выполняется в браузере жертвы. Например, если вы выводите комментарии без фильтрации:
echo $_POST['comment'];
Злоумышленник может отправить комментарий с таким кодом:
alert('XSS');
И этот скрипт выполнится у всех, кто увидит комментарий. Чтобы защититься, экранируйте вывод с помощью htmlspecialchars():
echo htmlspecialchars($_POST['comment'], ENT_QUOTES, 'UTF-8');
Также используйте Content Security Policy (CSP) и устанавливайте флаг HttpOnly для cookie, чтобы JavaScript не мог их прочитать.
Другие распространённые угрозы
Помимо SQL-инъекций и XSS, есть и другие опасности: CSRF, включение файлов, выполнение команд. Вот краткая таблица с методами защиты:
| Угроза | Метод защиты |
|---|---|
| SQL-инъекция | Подготовленные выражения, валидация |
| XSS | htmlspecialchars(), CSP |
| CSRF | Токены, SameSite cookies |
| Включение файлов | Белый список файлов, realpath() |
| Выполнение команд | Избегать shell_exec, escapeshellarg() |
Практические советы по безопасности
- Всегда обновляйте PHP и библиотеки.
- Используйте фреймворки (Laravel, Symfony) — они уже содержат защиту.
- Включите отображение ошибок только на этапе разработки, на продакшене — логируйте.
- Ограничьте права базы данных: не используйте root для приложения.
- Регулярно проводите аудит кода и пентесты.
Заключение
Безопасность — это не роскошь, а необходимость. SQL-инъекции и XSS — самые распространённые атаки, но с ними можно справиться, если следовать простым правилам: используйте подготовленные выражения, экранируйте вывод, валидируйте входные данные. Помните, что безопасность — это процесс, а не одноразовое действие.
Студия WNDER



