ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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: Давайте сделаем наши высоконагруженные сервера еще и надежными :)

С почтением,
  Илья Винокуров.




 




Copyright © Lexa Software, 1996-2009.