Информационная безопасность — Лекция 18 по основам информационных технологий для разработчиков ПО

01

Информационная безопасность

</>

ДУП.03 Основы информационных технологий

Лекция 18 · 2 академических часа (1 пара)

Каждый разработчик должен понимать, что его код может стать уязвимостью. Сегодня мы разберём самые главные угрозы, с которыми сталкивается каждый программист, и узнаем, как от них защититься. Простым языком, с примерами кода.

Безопасный код SQL-инъекции XSS Хеширование Защита API
Курс 2026 · для специальности «Разработчик ПО»
02

Что такое ИБ и зачем она разработчику?

Информационная безопасность (ИБ) — это защита данных от взлома, утечек и повреждений. Раньше считалось, что ИБ — это задача системных администраторов. Но сегодня каждый разработчик отвечает за безопасность своего кода.

Почему это важно?

  • Утечки данных — миллионы пользователей страдают.
  • Финансовые потери — огромные штрафы для компаний.
  • Репутация — пользователи перестают доверять.
Главное правило

Никогда не доверяйте пользовательскому вводу. Всё, что приходит извне (формы, ссылки, данные от других программ), должно проверяться.

03

SQL-инъекции: взлом через формы

SQL-инъекция — это атака, при которой злоумышленник вставляет вредоносный код в поле ввода, чтобы получить доступ к базе данных.

Пример плохого кода

// ОПАСНО! Никогда так не пишите let query = "SELECT * FROM users WHERE login = '" + login + "'";

Если ввести ' OR '1'='1, база вернёт всех пользователей.

Как защититься

Используйте параметризованные запросы. Они отделяют код от данных.

// БЕЗОПАСНО let query = "SELECT * FROM users WHERE login = ?"; db.execute(query, [login]);
Правило: никогда не склеивайте SQL-запросы из строк. Используйте параметры или ORM (библиотеки для работы с базой).
04

XSS: межсайтовый скриптинг

XSS (Cross-Site Scripting) — это атака, при которой злоумышленник вставляет вредоносный JavaScript-код на страницу сайта.

Пример плохого кода

<!-- ОПАСНО! --> <div>Привет, <%= username %></div>

Если ввести <script>alert('XSS')</script>, скрипт выполнится у всех пользователей.

Как защититься

Экранируйте пользовательский ввод перед выводом на страницу. Специальные символы (например, < и >) должны заменяться на безопасные коды.

<!-- БЕЗОПАСНО --> <div>Привет, <%= escapeHtml(username) %></div>
Правило: современные фреймворки (React, Angular, Vue) экранируют данные автоматически. Не отключайте эту защиту без причины.
05

Хранение паролей: только хеширование

Пароли нельзя хранить в открытом виде. Если базу украдут, злоумышленник получит все пароли. Поэтому пароли нужно хешировать — превращать в нечитаемый набор символов.

Как делать нельзя

user.password = "123456"; user.password = md5("123456");

MD5 и SHA-1 слишком быстрые, их можно подобрать.

Как делать правильно

const hash = await bcrypt.hash("123456", 10); user.password = hash;

Используйте bcrypt или Argon2 — они специально разработаны для паролей.

Правило: никогда не используйте MD5 или SHA для паролей. И никогда не храните пароли в открытом виде.
06

Аутентификация и авторизация

Аутентификация

Проверка «кто вы». Логин и пароль, отпечаток пальца, код из СМС.

Авторизация

Проверка «что вам можно». Например, доступ к админке только для администраторов.

Пример: вы зашли в банк (аутентификация). Теперь вы можете снять деньги только со своего счёта (авторизация).

Частая ошибка: проверить только аутентификацию, но забыть про авторизацию. Например, пользователь залогинен, но может открыть чужой профиль, изменив ID в ссылке.

Как защититься

Всегда проверяйте на сервере, имеет ли пользователь право на это действие.

07

Работа с секретами: API-ключи и пароли

Секреты — это пароли от баз данных, ключи от API, токены. Их нельзя хранить в коде.

Плохо: секреты в коде

const DB_PASSWORD = "super_secret_123"; const API_KEY = "sk-1234567890";

Если код попадёт в Git, секреты утекут.

Хорошо: переменные окружения

const DB_PASSWORD = process.env.DB_PASSWORD; const API_KEY = process.env.API_KEY;

Переменные окружения хранятся отдельно от кода, например, в файле .env, который не добавляется в Git.

Правило: добавьте .env в .gitignore. Никогда не коммитьте секреты в репозиторий.
08

Защита API с помощью токенов

Современные приложения общаются с сервером через API (Application Programming Interface, программный интерфейс). API нужно защищать, чтобы злоумышленник не мог получить данные.

Как это работает

  1. Пользователь вводит логин и пароль.
  2. Сервер проверяет и выдаёт токен (например, JWT — JSON Web Token).
  3. Клиент отправляет токен с каждым запросом.
  4. Сервер проверяет токен и отвечает.
// Отправка запроса с токеном fetch('/api/users', { headers: { 'Authorization': 'Bearer ' + token } });
Важно: токен — это как пропуск. Не храните в нём секретные данные (пароли, номера карт) — его можно декодировать.
09

Уязвимости в сторонних библиотеках

Современные проекты используют сотни сторонних библиотек. Если в одной из них есть уязвимость — под угрозой весь проект.

Пример: в 2021 году нашли уязвимость в библиотеке log4j (Java), которая позволяла выполнить любой код на сервере. Пострадали миллионы проектов по всему миру.

Как защититься

  • Регулярно обновляйте зависимости (библиотеки, которые использует ваш проект).
  • Используйте команды npm audit, pip-audit — они покажут уязвимые пакеты.
  • Перед добавлением новой библиотеки проверьте её на сайте snyk.io.
Совет

Чем меньше сторонних библиотек в проекте, тем меньше рисков. Не подключайте библиотеку, если можно написать нужную функцию самостоятельно.

10

Ошибки конфигурации

Даже безопасный код может стать уязвимым из-за неправильной настройки сервера или фреймворка.

Частые ошибки

  • Отладочный режим (debug) в продакшене — показывает ошибки и данные.
  • Стандартные пароли — admin/admin, root/root.
  • Открытые порты — база данных доступна из интернета.
  • CORS: * — разрешены запросы с любых сайтов.
  • Отсутствие HTTPS — данные передаются в открытом виде.

Что делать

Перед релизом проверяйте настройки: NODE_ENV=production, отключён debug, закрыты лишние порты, включён HTTPS.

Для разработчика

Используйте чек-листы безопасности перед каждым релизом. Они помогут не забыть важные настройки.

11

Логирование: что можно и что нельзя

Логи — это записи о том, что происходит в системе. Они помогают расследовать инциденты.

Что логировать

  • Входы и выходы пользователей.
  • Неудачные попытки входа.
  • Изменения прав доступа.
  • Ошибки и исключения.

Чего НЕ логировать

  • Пароли.
  • Токены и API-ключи.
  • Данные банковских карт.
  • Персональные данные в открытом виде.
Ошибка: если в логи попадают секреты, вы сами создаёте уязвимость. Злоумышленник, получивший доступ к логам, получит всё.
Совет

Перед записью в лог проверяйте: нет ли в сообщении паролей, токенов или персональных данных.

12

Инструменты безопасной разработки

Не нужно проверять безопасность вручную — есть специальные программы, которые помогают.

Анализ кода

  • SonarQube — ищет уязвимости в коде.
  • Semgrep — быстрый анализ.

Анализ зависимостей

  • Snyk — проверяет библиотеки.
  • Dependabot — автоматически обновляет зависимости.

Поиск секретов

  • GitGuardian.
  • TruffleHog.

Тестирование

  • OWASP ZAP — тестирует работающее приложение.
  • Burp Suite — для пентеста.
Совет

Внедряйте проверки безопасности в процесс разработки. Тогда уязвимости будут находиться до того, как код попадёт в продакшен.

13

Практические задания

Задание 1. SQL-инъекция

app.get('/user', (req, res) => { let id = req.query.id; let query = "SELECT * FROM users WHERE id = " + id; db.query(query, (err, result) => { res.json(result); }); });

В чём уязвимость? Как её исправить?

Задание 2. XSS

<h1>Привет, <?php echo $_GET['name']; ?></h1>

Что произойдёт, если ввести <script>alert(1)</script>? Как исправить?

Задание 3. Хранение паролей

Почему MD5 не подходит для паролей? Какие алгоритмы использовать?

14

Вопросы для самопроверки

  1. Что такое информационная безопасность?
  2. Почему нельзя доверять пользовательскому вводу?
  3. Что такое SQL-инъекция и как от неё защититься?
  4. Что такое XSS и как от него защититься?
  5. Чем аутентификация отличается от авторизации?
  6. Почему пароли нужно хешировать?
  7. Какие алгоритмы подходят для паролей?
  8. Где хранить секреты (API-ключи, пароли)?
  9. Зачем нужен токен для API?
  10. Что логировать и что нельзя?
15

Итоги

Мы рассмотрели:

  • Что такое ИБ и почему это важно.
  • SQL-инъекции и как от них защититься.
  • XSS и экранирование.
  • Аутентификацию и авторизацию.
  • Хранение паролей: bcrypt, Argon2.
  • Работа с секретами: переменные окружения.
  • Защита API с токенами.
  • Уязвимости в библиотеках.
  • Ошибки конфигурации.
  • Логирование.
  • Инструменты безопасной разработки.
Главная мысль

Безопасность — это часть профессии разработчика. Пишите не только работающий, но и безопасный код.

Спасибо за внимание! Вопросы?

Следующая тема — IT-профессионал и карьера в IT.