Назад | Перейти на главную страницу

Можно ли полагаться на очистку URL-адресов Apache?

Я установил Apache с mod_wsgi при установке по умолчанию с очень простым тестовым приложением test.wsgi это выглядит так:

def application(environ, start_response):
    status = '200 OK'
    output = 'Path: %s' % environ['PATH_INFO']
    response_headers = [('Content-type', 'text/plain'),
                        ('Content-Length', str(len(output)))]
    start_response(status, response_headers)
    return [output]

Сам Apache в основном настроен так:

WSGIScriptAlias / /home/user/wsgi_test/test.wsgi

Теперь, если я обращаюсь к URL-адресам на этом сервере, я получаю следующий результат:

Таким образом, мне кажется, что Apache разрешает / предварительно обрабатывает эти URL-адреса перед передачей их приложению, что приятно, поскольку может предотвратить множество атак включения локальных файлов и обхода каталогов, когда путь к файлу не является частью строки запроса.

Можно ли полагаться на это поведение или есть какой-то неприятный способ обмануть Apache, чтобы он действительно передавал URL-адрес, например /test/foo/../bar к приложению? Было бы это ошибкой Apache, если бы это было возможно?

Руководство по безопасности «Глубокая защита» предполагает, что вам следует настроить Apache для предварительной обработки путей, но вы также должны сами защитить себя от опасных путей.

Поскольку вы, вероятно, намного больше знаете о том, как должны выглядеть действительные пути, вы должны иметь возможность предложить гораздо более строгий тест, который также легче выполнить, чем что-либо, что Apache может сделать в целом.