Ограничение доступа по аргументу в query string
Станислав
server_inc на list.ru
Пт Май 26 00:17:22 UTC 2017
Привет,
Появилась такая задача - если от клиента в query string присутствует
аргумент "controller", nginx должен что-то делать (например разрывать
соединение). Было сделано такое:
if ($arg_controller) {
return 444 ;
}
Работало, нашли как это можно обойти: curl -s -L -D -
http://localhost/testme.php?controller=&controller=heresmysecretkeyword
Nginx не будет делать "return 444" так как аргумент controller пустой
(не определен), второй аргумент с таким же именем nginx игнорирует.
Данные передаются бэкэнду таким способом:
location = /testme.php {
.....
fastcgi_param QUERY_STRING controller=$secret_var&$args;
.....
}
Где $args приобретает форму: controller=&controller=heresmysecretkeyword
Бэкэнд перезаписывает аргумент последним аргументом в query string, и в
код интерпретируемым бэкэндом передается heresmysecretkeyword .
Сталкивался кто-то с такой ситуацией? Как можно это пофиксить если нет
возможности трогать сам бэкэнд. Пока только в голову приходит проверять
регулярным выражением $args на присутствие нежелаемого аргумента. Не
очень хочу юзать тут regex :/
Подробная информация о списке рассылки nginx-ru