1. Введение
PHP и MySQL — самые часто используемые технологии для веб-программирования. Однако взломать их очень легко с помощью неправильно написанного кода. В этой статье рассматриваются уязвимые коды, методы атак и способы их предотвращения.
2. Наиболее распространенные ошибки безопасности
🔸 a) SQL Injection (Внедрение SQL-кода)
Уязвимый код:
php CopyEdit $id = $_GET['id']; $query = "SELECT * FROM users WHERE id = $id";Что произойдет?
http CopyEdit ?id=1 OR 1=1Этот запрос выведет всех пользователей.
Способ защиты:
php CopyEdit $stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id"); $stmt->execute(['id' => $_GET['id']]); ✅ Используйте PDO или MySQLi + подготовленные запросы (prepared statements).🔸 b) XSS (Cross-site Scripting)
Уязвимый код:
php CopyEdit echo $_GET['name']; Пользователь может отправить следующую ссылку:html CopyEdit <script>alert('hacked!')</script>Защита:
php CopyEdit echo htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');🔸 c) CSRF (Cross-Site Request Forgery)
Пользователь открывает страницу и выполняет вредоносное действие через вашу сессию.
Защита:
- Добавьте токен к каждому POST-запросу.
$_SESSIONпроверяйте токен.
3. Усиление безопасности базы данных MySQL
🔹 Ограничение прав пользователя
sql CopyEdit GRANT SELECT, INSERT ON mydb.* TO 'user'@'localhost'; Никогда не пишите код через пользователяroot.🔹 Сохранение паролей
Ошибка:
php CopyEdit $password = $_POST['password'];Правильно:
php CopyEdit $hash = password_hash($_POST['password'], PASSWORD_DEFAULT);И проверка:
php CopyEdit if (password_verify($input_password, $hash)) { // успех }4. Безопасность загрузки файлов
🔸 Уязвимый код:
php CopyEdit move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);🔸 Защита:
- Разрешите только разрешенные типы файлов:
- Измените имя файла:
5. Безопасность сессий и cookie
🔹 Предотвращение перехвата сессии:
php CopyEdit ini_set('session.cookie_httponly', 1); session_start(); session_regenerate_id(true);🔹 Настройки cookie:
php CopyEdit setcookie("auth", $token, [ 'expires' => time() + 3600, 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ]);6. Дополнительные меры защиты
- Обязательно используйте HTTPS.
- Установите правильные разрешения для файлов и каталогов (
chmod 755,644). - Заблокируйте файлы
.envс помощью.htaccess:
7. Заключение
Безопасность при работе с PHP и MySQL — это не выбор, а обязанность. Всегда считайте информацию, вводимую пользователями, ненадежной. Защищая свой код, вы защищаете как своих пользователей, так и самих себя.