ДУП.03 Основы информационных технологий
Лекция 18 · 2 академических часа (1 пара)
Каждый разработчик должен понимать, что его код может стать уязвимостью. Сегодня мы разберём самые главные угрозы, с которыми сталкивается каждый программист, и узнаем, как от них защититься. Простым языком, с примерами кода.
Информационная безопасность (ИБ) — это защита данных от взлома, утечек и повреждений. Раньше считалось, что ИБ — это задача системных администраторов. Но сегодня каждый разработчик отвечает за безопасность своего кода.
Никогда не доверяйте пользовательскому вводу. Всё, что приходит извне (формы, ссылки, данные от других программ), должно проверяться.
SQL-инъекция — это атака, при которой злоумышленник вставляет вредоносный код в поле ввода, чтобы получить доступ к базе данных.
Если ввести ' OR '1'='1, база вернёт всех пользователей.
Используйте параметризованные запросы. Они отделяют код от данных.
XSS (Cross-Site Scripting) — это атака, при которой злоумышленник вставляет вредоносный JavaScript-код на страницу сайта.
Если ввести <script>alert('XSS')</script>, скрипт выполнится у всех пользователей.
Экранируйте пользовательский ввод перед выводом на страницу. Специальные символы (например, < и >) должны заменяться на безопасные коды.
Пароли нельзя хранить в открытом виде. Если базу украдут, злоумышленник получит все пароли. Поэтому пароли нужно хешировать — превращать в нечитаемый набор символов.
MD5 и SHA-1 слишком быстрые, их можно подобрать.
Используйте bcrypt или Argon2 — они специально разработаны для паролей.
Проверка «кто вы». Логин и пароль, отпечаток пальца, код из СМС.
Проверка «что вам можно». Например, доступ к админке только для администраторов.
Пример: вы зашли в банк (аутентификация). Теперь вы можете снять деньги только со своего счёта (авторизация).
Всегда проверяйте на сервере, имеет ли пользователь право на это действие.
Секреты — это пароли от баз данных, ключи от API, токены. Их нельзя хранить в коде.
Если код попадёт в Git, секреты утекут.
Переменные окружения хранятся отдельно от кода, например, в файле .env, который не добавляется в Git.
.env в .gitignore. Никогда не коммитьте секреты в репозиторий.
Современные приложения общаются с сервером через API (Application Programming Interface, программный интерфейс). API нужно защищать, чтобы злоумышленник не мог получить данные.
Современные проекты используют сотни сторонних библиотек. Если в одной из них есть уязвимость — под угрозой весь проект.
log4j (Java), которая позволяла выполнить любой код на сервере. Пострадали миллионы проектов по всему миру.
npm audit, pip-audit — они покажут уязвимые пакеты.Чем меньше сторонних библиотек в проекте, тем меньше рисков. Не подключайте библиотеку, если можно написать нужную функцию самостоятельно.
Даже безопасный код может стать уязвимым из-за неправильной настройки сервера или фреймворка.
admin/admin, root/root.Перед релизом проверяйте настройки: NODE_ENV=production, отключён debug, закрыты лишние порты, включён HTTPS.
Используйте чек-листы безопасности перед каждым релизом. Они помогут не забыть важные настройки.
Логи — это записи о том, что происходит в системе. Они помогают расследовать инциденты.
Перед записью в лог проверяйте: нет ли в сообщении паролей, токенов или персональных данных.
Не нужно проверять безопасность вручную — есть специальные программы, которые помогают.
Внедряйте проверки безопасности в процесс разработки. Тогда уязвимости будут находиться до того, как код попадёт в продакшен.
В чём уязвимость? Как её исправить?
Что произойдёт, если ввести <script>alert(1)</script>? Как исправить?
Почему MD5 не подходит для паролей? Какие алгоритмы использовать?
Мы рассмотрели:
Безопасность — это часть профессии разработчика. Пишите не только работающий, но и безопасный код.
Спасибо за внимание! Вопросы?
Следующая тема — IT-профессионал и карьера в IT.