Проверка ввода и кодирование вывода
Проверяйте все входные данные на сервере, кодируйте вывод в правильном контексте и предотвращайте внедрение.
«Проверка ввода и кодирование вывода» — бесплатный урок Cyber Security Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cyber Security Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cyber Security Academy содержит 4 уроков всего.
Почему важна проверка входных данных
Уязвимости, связанные с внедрением, — SQL, команд, LDAP, XPath и другие — возникают, когда недоверенные входные данные интерпретируются как код. Проверка входных данных гарантирует, что данные соответствуют ожидаемым типам, длине и форматам до их обработки, хранения или возврата.
Проверка по списку разрешённых и запрещённых значений
Проверка по списку разрешённых значений (белому списку) определяет, что IS допустимо: только буквенно-цифровые символы, только целые числа в диапазоне 1–100, только корректные форматы адресов электронной почты. Проверка по списку запрещённых значений (чёрному списку) пытается блокировать известные вредоносные входные данные и всегда остаётся неполной. Предпочитайте списки разрешённых значений.
Проверка на стороне сервера
Проверка на стороне клиента улучшает взаимодействие с пользователем, но не обеспечивает никакой безопасности — злоумышленники легко обходят её с помощью инструментов разработчика браузера или curl. Всегда выполняйте проверку на стороне сервера. Клиентская проверка — это удобство, серверная — средство защиты.
Проверка входных данных разных типов
Числа: проверяйте тип и диапазон. Строки: проверяйте длину и набор символов. Даты: выполняйте строгий разбор, проверяйте диапазон. Файлы: проверяйте расширение AND магические байты/тип MIME — никогда не доверяйте только расширению. URL: разбирайте и проверяйте схему, узел и компоненты пути.
Параметризованные запросы предотвращают SQL-инъекции
Самый важный результат проверки входных данных для баз данных — никогда не подставлять пользовательский ввод путём конкатенации в SQL. Используйте параметризованные запросы (подготовленные выражения), передавая пользовательский ввод как параметр, а не вставляя его в строку запроса.
// WRONG:
const q = "SELECT * FROM users WHERE name = '" + name + "'";
// RIGHT:
const q = "SELECT * FROM users WHERE name = $1";
await client.query(q, [name]);Контексты кодирования вывода
Одна и та же строка требует разного кодирования в зависимости от контекста. Тело HTML: кодирование HTML (< > &). Атрибут HTML: кодирование атрибутов HTML. JavaScript: экранирование JS. Параметр URL: кодирование URL (процентное кодирование). Использование неправильного кодирования оставляет уязвимости, которыми пользуются злоумышленники.
Кодирование HTML для защиты от XSS
Никогда не вставляйте пользовательские данные непосредственно в HTML. Используйте движок шаблонов или библиотеку, автоматически экранирующую HTML. В React выражение {value} безопасно; dangerouslySetInnerHTML отключает экранирование. В Django шаблоны автоматически экранируют данные, если явно не используется фильтр safe.
Кодирование в контексте JavaScript
При вставке данных в JavaScript, например в переменную, инициализированную пользовательскими данными, кодирования HTML недостаточно. Используйте кодирование JSON: JSON.stringify(value). Это предотвращает выход данных за пределы контекста строкового литерала JS.
Кодирование URL
Данные, предоставленные пользователем и вставляемые в URL, необходимо кодировать в процентах с помощью encodeURIComponent() (JS) или urllib.parse.quote() (Python). Некодированные данные могут изменять структуру URL, что приводит к открытым перенаправлениям или обходу пути.
Политика безопасности содержимого как эшелонированная защита
CSP добавляет второй уровень защиты от XSS. Строгая CSP с использованием одноразовых значений предотвращает выполнение встроенных скриптов даже при внедрении XSS-нагрузки, поскольку браузер отказывается выполнять скрипты без правильного атрибута одноразового значения.
Предотвращение XSS на основе DOM
DOM XSS возникает, когда JavaScript считывает данные из источников, контролируемых атакующим (location.hash, document.URL, cookie), и записывает их в опасные приёмники (innerHTML, document.write, eval). Проверьте все потоки данных от API браузера к приёмникам DOM с помощью инструментов статического анализа.
Проверка знаний
Почему проверка входных данных на стороне сервера необходима даже при реализации проверки на стороне клиента?
Итоги
Проверка входных данных (списки разрешённых значений, проверка типов, ограничения длины) в сочетании с контекстно-зависимым кодированием вывода (HTML, JS, URL, параметризация SQL) — основная защита от атак с внедрением и XSS. И то и другое необходимо применять на стороне сервера без исключений.
Часто задаваемые вопросы
Урок «Проверка ввода и кодирование вывода» бесплатный?
Да — полный текст урока «Проверка ввода и кодирование вывода» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cyber Security Academy, подпишись на CoddyKit PRO. Курс Cyber Security Academy содержит 4 уроков всего.
Чему я научусь в уроке «Проверка ввода и кодирование вывода»?
Проверяйте все входные данные на сервере, кодируйте вывод в правильном контексте и предотвращайте внедрение. Ты практикуешь Cyber Security Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cyber Security Academy?
Предыдущий опыт не требуется. Cyber Security Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Проверка ввода и кодирование вывода»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cyber Security Academy?
Да. Каждый урок Cyber Security Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Проверка ввода и кодирование вывода
- Безопасное управление зависимостями
- OWASP ASVS: стандарт проверки безопасности приложений
- Методы безопасного анализа кода