Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Ошибка в SSI encoding
Здравствуйте, Игорь!
Повозился с конфигурированием стабильного nginx и обнаружил на первый взгляд
безобидную ошибку в ngx_http_core_module
Дело в том, что модуль парсит QUERY STRING и парсит его не строго по RFC1738
http://en.wikipedia.org/wiki/Query_string
Модуль распознает только амперсанд '&' в качестве разделителя параметров, когда
как точку с запятой ';' игнорирует. В результате очень легко создается дыра в
следующей SSI конструкции:
<!--# if expr="!$arg_action" -->
<!--# include virtual="/back/script.pl?args&action=good" -->
<!--# else -->
Sorry
<!--# endif -->
Если запрос будет http://server/index.html?a1=2;action=bad, то бекенду попадет
строка:
/back/script.pl?a1=2;action=bad&action=good
И кто его знает какой action сработает...
RFC1738 также не соблюдает и <!--# echo var="" encoding="url" -->
По крайней мере 2 символа ';' и '=' оно не кодирует :(, а надо бы...
PS: Многие скажут, что ';' не актуальна в QUERY_STRING и будут не правы. Точка
с запятой вынужденно становится популярной, т.к. в XML конфигурации
<action url="http://server/script?p=1&p=2&p=3" /> не валидно,
а так <action url="http://server/script?p=1;p=2;p=3" /> валидно
PSS: Давайте сделаем наши высоконагруженные сервера еще и надежными :)
С почтением,
Илья Винокуров.
|