На что реально смотреть при изучении уязвимости на примерах
Часто сталкиваюсь с тем, что новичкам кажется, что достаточно просто найти баг и сразу его залатать в коде, а на практике нюансов гораздо больше. Вот, например, типичная ситуация с XSS: не всегда проблема валидации входящих данных — иногда баг прячется в неверном кодировке вывода или в смешивании данных между контекстами (HTML, JS, атрибуты). Проверять нужно не только несколько строк, а порядок работы с данными на всех этапах — фильтрация, хранение, вывод.
Чтобы проверить уязвимость, сначала важно понять, где и как данные проходят, и подумать, что может изменить контекст. По возможным решениям — часто пишут про стандартные библиотеки или автоэкранирование, но оно не всегда универсально. Иногда лучше ограничить ввод и использовать белый список символов.
В общем, если хотите научиться действительно бороться с уязвимостями, не надо гоняться за конкретным багом, а лучше сделать обзор процесса обработки данных и понять, где может закрасться ошибка. Кто еще сталкивался с тем, что исправление багов ломало работу сайта из-за неправильной оценки контекста? Как делаете проверку у себя?