Здравствуйте, Landgraph, Вы писали:
L>Статья:
L>Скрытая угроза: «неизменяемые» поля Web-формАвтор(ы): Landgraph
Дата: 11.01.2008
Очень часто при анализе сторонних скриптов обнаруживается одна и та же распространенная ошибка: отсутствие проверки передаваемых данных в «неизменяемых» полях, таких как <input type=”hidden”>, <input type=”radio”>, <input type=”checkbox”> и, конечно же, <select></select>.
Почему-то начинающие и более опытные программисты, считают, что «неизменяемые» явно поля – никак нельзя отредактировать. Поверьте, это далеко не так!
L>Авторы:
L> Landgraph
L>Аннотация:
L>Очень часто при анализе сторонних скриптов обнаруживается одна и та же распространенная ошибка: отсутствие проверки передаваемых данных в «неизменяемых» полях, таких как <input type=”hidden”>, <input type=”radio”>, <input type=”checkbox”> и, конечно же, <select></select>.
L>Почему-то начинающие и более опытные программисты, считают, что «неизменяемые» явно поля – никак нельзя отредактировать. Поверьте, это далеко не так!
Вообще тема интересная и требующая большего раскрытия. Безопасность Web-приложений очень актуальная тема в настоящее время, а подмена параметров пользователей является самым распространенным путем внедрения зловредного кода на сервер. Причем параметры пользователя это не только тело запроса — есть еще Cookie и заголовки HTTP. Причем чаще всего программисты забывают именно про заголовки HTTP.
Например, система борьбы с накрутками в голосованиях — временно запоминает информацию о пользователе (в базу данных), в том числе его браузер (заголовок User-Agent), при этом никто не фильтрует строку — проблема, думаю, понятна.
Еще достаточно важная тема это фильтрация vs экранирование. Например, многие PHP разработчики полюбили опцию magic_quotes_gpc (кстати, она уже deprecated) и считают, что это защитит их от всех проблем (например, при вставке в таблицу строковых значений у злоумышленника не будет возможности завершить строку раньше времени). Однако это не всегда помогает, особенно, если это единственный способ экранирования данных при вызове команды оболочки. Опять простой пример: допустим вызывается команда оболочки echo "$_POST['data']" и при этом активна опция magic_quotes — казалось бы строку не закрыть? А зачем ее закрывать? magic_quotes не экранирует бэк тики (`), поэтому достаточно передать `rm -rf /var/www` в качестве data.
Ну и так далее. Я бы всем web разработчикам настоятельно рекомендовал ознакомление с моделью SDL (Security development lifecycle) от MS, моделями STRIDE и DREAD и т.п. Ну и очень полезные материалы можно найти на сайтах
www.webappsec.org и
www.owasp.org.
P.S. приведенные примеры ошибок в этом сообщение мною встречались в реальной жизни, так что это не просто пространные рассуждения.