Ошибка в SSI encoding
Илья Винокуров
ilvin at mail.ru
Wed Apr 8 16:33:43 MSD 2009
Здравствуйте, Игорь!
Повозился с конфигурированием стабильного 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: Давайте сделаем наши высоконагруженные сервера еще и надежными :)
С почтением,
Илья Винокуров.
More information about the nginx-ru
mailing list