nginx: Не отклоняйте URL с “..” / “точка точка”

Вопрос или проблема

У меня есть сервер backend, на котором работает мой сайт. Перед этим у меня настроен nginx как обратный прокси. Я хотел бы, чтобы nginx передавал все запросы на backend, но вместо этого он отклоняет некоторые запросы, которые считает “недопустимыми”. Например, /...

Я уже установил merge_slashes off; в конфигурации nginx, но это только предотвращает нормализацию путей; он все равно немедленно возвращает ошибку 400, если какой-либо запрос может привести, после нормализации, к переходу вверх по каталогам. Так, /a/.. работает нормально и не искажается, но /a/../.. вызовет ошибку 400 вместо того, чтобы перейти на backend.

Я хотел бы настроить nginx так, чтобы он не отклонял эти запросы. Как мне это сделать?

Система: Ubuntu 24.10, nginx 1.26.0

Ответ или решение

Для решения проблемы с отклонением запросов, содержащих последовательность ".." (точка-точка), в конфигурации Nginx, необходимо реализовать несколько ключевых шагов. Это важно не только для обеспечения совместимости с различными запросами, но и для улучшения пользовательского опыта взаимодействия с вашим сервером.

1. Понимание проблемы

Nginx, как обратный прокси-сервер, по умолчанию блокирует запросы, которые содержат путь к родительским директориям (например, "/.."). Это делает сервер более защищённым, предотвращая возможные уязвимости, связанные с доступом к скрытым или нежелательным ресурсам. Однако, в вашем случае, вы хотите, чтобы Nginx передавал такие запросы на бэкенд-сервер, а не отклонял их.

2. Настройка конфигурации Nginx

Чтобы разрешить обработку запросов с "..", вам нужно изменить конфигурацию вашего сервера. В частности, следует использовать директиву location для обработки всех запросов и перенаправления их на бэкенд без отказов.

Пример конфигурации

server {
    listen 80;
    server_name yourdomain.com;

    # Настройка для обработки всех запросов
    location / {
        # Включаем передачу запросов на бэкенд
        proxy_pass http://backend_server;

        # Дополнительные настройки прокси
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # Отключаем проверку на ".."
    if ($request_uri ~* "\.\.") {
        set $deny_uri 0; # Флаг для перенаправления вместо отклонения
    }
}

3. Тестирование и отладка

После внесения изменений в конфигурацию Nginx, обязательно проверьте конкретные запросы с "..". Вы можете использовать инструменты, такие как curl, для тестирования различных сценариев:

curl -I http://yourdomain.com/a/../../

Убедитесь, что запрос успешно достигает бэкенда и возвращает ожидаемый ответ.

4. Примечания по безопасности

Хотя такая настройка может облегчить взаимодействие с бэкендом для конечных пользователей, она также может сделать ваш сервер более уязвимым к атакам. Убедитесь, что ваш бэкенд-сервер надёжно защищён и фильтрует все потенциально опасные запросы.

Заключение

Настройка Nginx для обработки запросов с ".." требует понимания как принципов работы самого сервера, так и безопасности веб-приложений в целом. С помощью предложенных шагов вы сможете настроить свой сервер, чтобы он был более удобным для пользователей, сохраняя при этом высокий уровень безопасности. Не забудьте регулярно следить за логами и проводить аудит настроек для выявления возможных уязвимостей.

Оцените материал
Добавить комментарий

Капча загружается...