Hello! On Thu, Jan 28, 2021 at 07:37:17PM +0300, Иван wrote:
> Здравствуйте! > > Вопрос коротко: является ли > > rewrite ... redirect на 100% безопасным при использовании if внутри > location. > > > Подробнее: > > В https://www.nginx.com/resources/wiki/start/topics/depth/ifisevil/ > > > The only 100% safe things which may be done inside if in a location > > context are: > > > > * return > > <https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#return> > > ...; > > * rewrite > > <https://nginx.org/en/docs/http/ngx_http_rewrite_module.html#rewrite> > > ... last; > > > то есть единственным вариантов rewrite на 100% безопасным с if в > location написан rewrite с last. Учитывая написанное в статье далее и > моё понимание nginx предполагаю, что rewrite можно не только с last, но > так же с redirect и permanent, так как исключают выполнение других > директив в рамках этого локейшена. > > "Возможно опасными" тут могут быть только break и, вероятно, отсуствие > флагов rewrite так как оставляют возможность выполнения других директив > не из модуля rewrite. > > Я прав? Не совсем. Там, собственно, кто-то бред написал про "100% safe", да останется это на совести того, кто полез править написанную мной статью, не понимая её. Не бывает "100% безопасного" использования if'а внутри location'а, в лучшем случае бывает просто безопасное использование. Возвращаясь к исходному вопросу про безопасность "rewrite ... last", то ответ тут длинный. В случае if'а безопасность достигается ровно одним способом: обработка запроса не должна происходить внутри неявного location'а, созданного if'ом. Это бывает в случае "rewrite ... last", а также почти бывает в случае "return", если по этому return'у nginx куда-то уходит в рамках error_page. Если же речь идёт о том, что клиенту возвращается ответ - как в случае "return" без соответствующего error_page или "rewrite ... redirect" - то мы уже попадаем на отдельную конфигурацию, в рамках которой этот ответ возвращается. Каких-либо известных проблем в подобных ситуациях - нет, по крайней мере со стандартными модулями. Да и со сторонними скорее всего тоже - там будет простое наследование конфигурации, накосячить сложно. Но таки никто не гарантирует, что прооблем нет совсем. -- Maxim Dounin http://mdounin.ru/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru