Re: специальные символы в запросах

Maxim Dounin mdounin на mdounin.ru
Вт Апр 23 12:39:39 UTC 2019


Hello!

On Tue, Apr 23, 2019 at 04:59:38AM -0400, anatolr wrote:

> включаю debug как понять почему строку location не использует
> 
> location: ~ "^(.*)/\<(.*)$" {
>     return 404;    
> }
> 
> 2019/04/23 11:43:55 [debug] 2737#0: *23 test location: "/"
> 2019/04/23 11:43:55 [debug] 2737#0: *23 test location: "images/"
> 2019/04/23 11:43:55 [debug] 2737#0: *23 test location: ~ "^(.*)alert(.*)$"
> 2019/04/23 11:43:55 [debug] 2737#0: *23 test location: ~
> "^(.*)document(.*)$"
> 2019/04/23 11:43:55 [debug] 2737#0: *23 test location: ~ "\.php"
> 2019/04/23 11:43:55 [debug] 2737#0: *23 using configuration "\.php"

Когда речь идёт о location'ах, заданных регулярными выражениями - 
используется первое совпавшее.  В вашем случае это "location ~ \.php", 
как ясно видно из debug log'а.  Подробнее стоит почитать в 
документации:

http://nginx.org/ru/docs/http/ngx_http_core_module.html#location

Отдельно отмечу, что location отвечает только за проверку 
собственно URI запроса, без учёта аргументов.  Соответственно 
закрыть так наиболее типичные XSS-уязвимости - в аргументах 
запроса - не получится, надо вместо этого использовать if'ы.  И 
там кроме этого - вылезет отдельная проблема с необходимостью 
учитывать возможный URL encoding.

Но вообще, как вам уже совершенно верно сказали, подобный путь 
решения проблем безопасности - крайне сомнителен.

-- 
Maxim Dounin
http://mdounin.ru/


Подробная информация о списке рассылки nginx-ru