PHP — идеальный язык для веба, но сколько сайтов падало просто потому, что разработчик поленился использовать prepared statements или хешировать пароли? Бесконечно много. Если ты до сих пор хранишь пароли в plain text или вставляешь данные в SQL через конкатенацию строк — ты не разработчик, ты живое приглашение для хакера.
Так что, давай коротко и жёстко: какие минимум-движения должен сделать любой PHP-разработчик, чтобы его код не сдох от первой же атаки.
Prepared Statements
SQL-инъекции — это когда твой код превращается в бесплатный админ-панель для чужих рук. Лечится одной таблеткой — подготовленные выражения.
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $email]);
Всё. Забудь про "SELECT * FROM users WHERE email='$email'". Если ты так делаешь, то либо ты ленивый, либо ты работаешь на хакеров.
Валидация входных данных
Пользователь бывает хитёр: он введёт 1' OR '1'='1, он введёт <script>, он введёт «qwe» в поле для телефона. Твоя задача — не верить ни одному байту, что приходит от него.
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
if ($email === false) {
throw new Exception("Пошёл нахер со своим email");
}
HTTPS
До сих пор встречаются проекты без HTTPS. Если у тебя так — выключи свой сервер и иди работать таксистом. Пароли и данные через HTTP — это как писать пин-код на лбу.
Пароли
Никогда, слышишь, никогда не храни пароль в базе в открытом виде. Даже в dev-окружении. Если в коде у тебя md5($password), знай: тебя уже проклинают sysadmin и твои будущие пользователи.
$hash = password_hash($password, PASSWORD_DEFAULT);
if (password_verify($password, $hash)) {
// Пользователь ввёл верный пароль
}
CSRF
CSRF — это когда злоумышленник заставляет пользователя сделать запрос от его имени. У тебя нет CSRF-токенов? Поздравляю, ты только что выдал ключи от квартиры с мебелью. Добавляй токен в форму, проверяй при запросе. Без вариантов.
XSS
Любой ввод от пользователя — это потенциальный:
<script>alert('pwned')</script>Да, всё так просто.
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
Если ты этого не делаешь — твой сайт скоро будет показывать не твой контент, а «поздравляем, вы выиграли айфон».
Обновления и зависимости
Composer — не игрушка. Пакеты устаревают, баги латают. Если ты не обновляешь зависимости, то твой проект живёт на динамитной шашке с горящей фитильной верёвкой.
Ограничение доступа
Не давай пользователю то, что ему не нужно. Права на файлы, доступы в админку, открытые /phpmyadmin — это всё мины. Ставь аутентификацию, авторизацию и закрывай лишнее.
CSP
Content Security Policy — не серебряная пуля, но хороший забор против XSS. Настроил — и браузер не даст грузить левые скрипты. Лучше иметь, чем потом вытирать слёзы.
Вместо заключения
Безопасность — это не галочка в чеклисте. В PHP ты живёшь в мире, где дыр больше, чем в сыре, и твоя задача хотя бы не сделать новые своими руками.
- Prepared statements спасут от SQL-инъекций.
password_hashспасёт пользователей от утечек.- CSRF-токены и XSS-фильтры спасут от школьников с браузером.
- HTTPS и права доступа — минимальная гигиена.
Хочешь игнорировать? Игнорируй. Только не удивляйся, когда твой проект утром окажется в индексе Google как «онлайн-казино в Нигерии».
0 комментариев