Pode-se confiar em URLs saneantes do Apache?

1

Eu configurei o Apache com mod_wsgi em uma instalação padrão, com um aplicativo de teste muito simples test.wsgi que é assim:

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]

O próprio Apache é basicamente configurado assim:

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

Agora, se eu acessar URLs nesse servidor, recebo a seguinte saída:

  • GET /test/../test/./test = > %código%
  • Path: /test/test = > %código%
  • GET /test/%2E%2E/abc = > Path: /abc (devido a GET /test%2fabc , suponho)

Assim, parece-me que o Apache resolve / pré-processa essas URLs antes de passá-las para o aplicativo, o que é legal porque pode evitar muitos ataques de inclusão de arquivos locais e de passagem de diretórios onde o caminho do arquivo não faz parte do string de consulta.

Pode-se confiar neste comportamento ou há alguma maneira desagradável de enganar o Apache para realmente passar um URL como 404 Not found para o aplicativo? Seria um erro do Apache se isso fosse possível?

    
por Niklas B. 19.02.2012 / 23:49

1 resposta

2

A diretriz de segurança "Defesa em profundidade" sugere que você deve configurar o Apache para pré-processar caminhos, mas também deve proteger contra caminhos perigosos.

Como você provavelmente sabe muito mais sobre como devem ser os caminhos válidos, você deve ser capaz de criar um teste muito mais restritivo que seja mais fácil de acertar do que qualquer coisa que o Apache possa fazer em geral.

    
por 20.02.2012 / 01:21