💻
Безопасность

Основы безопасного кодирования — защита от SQL injection, XSS и CSRF

20.05.2034
← Все статьи

Безопасное кодирование — это не просто "не делать ошибок". Это целая философия: не доверять никаким пользовательским вводам, проверять каждый внешний источник и правильно форматировать каждый вывод. Опытные разработчики называют это "defense in depth" — то есть защита должна быть на каждом уровне. Если один уровень не сработает, второй защитит. Этот подход особенно важен в веб-приложениях, поскольку они постоянно открыты для атак через интернет.

SQL injection — самая опасная уязвимость

SQL injection — это когда атакующий получает возможность управлять базой данных, добавляя свои команды в SQL запрос. Например, если вы напрямую вставляете ID, введенный пользователем, в SQL, атакующий может написать "1 OR 1=1" вместо ID и прочитать всю таблицу. Или написать "1; DROP TABLE users" и полностью удалить таблицу. Единственный правильный способ защиты — использовать prepared statements. В prepared statements PDO или MySQLi данные не смешиваются с SQL кодом, и возможность атаки исчезает.

XSS — атака Cross-Site Scripting

XSS атака — это внедрение чужого JavaScript кода в страницу. Если вы выводите текст, введенный пользователем, напрямую в HTML страницу, атакующий может через script тег украсть сессионные cookie, перенаправить пользователя на другой сайт или совершить действия от его имени. Защита очень проста: перед выводом нужно использовать функцию htmlspecialchars() с флагом ENT_QUOTES. Дополнительно заголовок Content Security Policy дает еще один уровень защиты.

CSRF — Cross-Site Request Forgery

В CSRF атаке пользователь сам того не зная совершает действие на другом сайте. Например, пользователь вошел на ваш сайт и его сессия открыта. Затем он заходит на другой сайт, где есть скрытая форма, отправляющая запрос на ваш сайт — браузер автоматически добавляет cookie и запрос выполняется. Защита — использование уникального CSRF токена в каждой форме. Этот токен хранится в сессии и проверяется на сервере.

Secure defaults — безопасные настройки по умолчанию

Хорошая программа должна быть написана так, чтобы если разработчик не сделал никаких настроек, система все равно была в безопасном состоянии. Например, новый пользователь не должен автоматически получать права администратора. Новый файл не должен быть автоматически открыт для всех. Cookie должны автоматически быть HttpOnly и Secure. Сессия должна автоматически регенерироваться. Этот принцип называется "secure by default" и применяется как стандарт в современных фреймворках.

Code review — важен взгляд со стороны

Даже самый опытный разработчик делает ошибки. Поэтому при командной работе каждое изменение должно быть просмотрено другим разработчиком. В процессе code review не только находятся ошибки, но и происходит обмен знаниями. Кроме того, инструменты автоматического анализа — SonarQube, PHPStan, Psalm — постоянно отслеживают качество кода. Эти инструменты могут также выявлять потенциальные проблемы безопасности.

Практика Sayt.uz

На платформе Sayt.uz все SQL запросы выполняются через PDO prepared statements. Пользовательские вводы фильтруются htmlspecialchars(), а заголовки Content Security Policy активированы. Каждая важная форма защищена CSRF токеном. Если разместите свой сайт на хостинге Sayt.uz, защитные слои на уровне сервера дают дополнительную безопасность. Также доступна регистрация домена и установка SSL сертификата.

Похожие статьи

🛡️ Защита от ransomware: бэкапы, сегментация, EDR и реагирование на инциденты 🎣 Защита сотрудников от фишинговых атак: обучение и технические меры 📋 Чеклист аудита безопасности: WordPress, сервер, SSL и проверка резервных копий 🔐 Мониторинг SSL-сертификатов: отслеживание срока действия и авто-обновление
🌐 Язык
🇺🇿 O'zbek 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English