Добавлю, что директива api так устроена, что она делает автоматический редирект если был запрошен путь, совпадающий с location-ом, в котором она находится, но без слеша. Таким же свойством обладает и, например, директива proxy_pass.
А вот директивы в location /console этого свойства не имеют, поэтому так.
Ясно, получается, что если даже указать location /console/ то всё равно перенаправит на http://www.example.com/console/. Думал, что лучше будет указать у себя в конфигурации вариант со слэшем в конце.
==================== Results ===================
>> Problem: [alias_traversal] Path traversal via misconfigured alias.
Description: Using alias in a prefixed location that doesn't ends with directory separator could lead to path traversal vulnerability.
Additional info: https://github.com/yandex/gixy/blob/master/docs/en/plugins/aliastraversal.md
Pseudo config:
server {
server_name example.com;
location /console {
alias /usr/share/angie-console-light/html;
}
}
==================== Summary ===================
Total issues:
Unspecified: 0
Low: 0
Medium: 1
High: 0
Хотелось бы использовать вариант с закрывающим слэшем и без редиректов.
Больше похоже на то, что gixy врет на счет уязвимости. Уязвимость была бы, если бы alias содержал слеш на конце, а location нет. В данном случае и alias и location без слеша на конце.
В данном случае они вполне ожидаемое поведение называют уязвимостью.
Если у меня есть пачка файлов или директорий, начинающихся с ru- и я хочу чтобы они были также доступны по именам, начинающимся с en-, то вполне могу написать такой конфиг:
location /path/ru- {
alias /root/path/en-;
}
и это нормально.
В конфиге с /console это может быть нежелательным поведением, что все запросы начинающиеся с /console будут обработаны данным location, но будет ли это обязательно проблемой - нет. А для кого-то проблемой будет обратная ситуация: если добавить туда слеш, то запрос без слеша /console попадет не туда, а люди часто забывают слеши на конце URI.
Какая ситуация неприятнее, что /console попадет не туда, или что запрос /console-babla попадет в данный location - зависит от остальной конфигурации. На мой взгляд оба варианта не идеальны, но их никак нельзя назвать уязвимыми только на основании отсутствия/наличия слеша.
Впрочем, есть у меня идея сделать директиву auto_redirect on/off. Сейчас у некоторых директив есть такое свойство (далее цитата из документации на location):
Если префиксный location задан со слэшом в конце и запросы обрабатываются при помощи proxy_pass, fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass или grpc_pass, используется особое поведение. На запрос с URI без завершающего слэша, в остальном совпадающим с префиксом, будет возвращено постоянное перенаправление с кодом 301, указывающее на URI запроса с добавленным в конце слэшом.
Так вот, auto_redirect on будет включать такое поведение без этих директив.
Бегло прочитал сообщение и побежал проверять этот параметр ))))))))
Оказывается рано ещё)
Только вот gixy об этом знать не будет, давно не обновляется. А в NixOS перед обновлением конфигурации запускается проверка конфигурации nginx через gixy, если есть потенциальные проблемы, то система не даст применить обновление.