Esta é uma regra insegura do Apache Rewrite?

1

Eu tenho uma regra de reescrita configurada assim:

RewriteCond %{DOCUMENT_ROOT}/cache/%{REQUEST_URI} -f
RewriteRule ^(.*)$ cache/$1 [QSA,PT,L]

Breve explicação para esta regra: verifica se existe um arquivo solicitado no diretório de cache. Em caso afirmativo, ele serve ao diretório de cache.

Por exemplo uma solicitação para o link seria veiculado a partir do link (se esse arquivo existir).

O que me preocupa é se o RewriteRule é inseguro. É possível que alguém solicite um URL como este, com períodos duplos para mover um diretório:

link

Então fazendo com que private_file.txt seja servido de um diretório acima da minha pasta pública do apache?

    
por Eliot Sykes 17.02.2010 / 13:05

2 respostas

2

A inclusão de .. em um URL não funciona no nível de solicitação HTTP ou no nível do navegador. Os navegadores apenas resolvem os caminhos relativos, enviando uma solicitação para o arquivo apropriado (limitando-o na raiz do servidor). Então digitando isso em uma barra de endereços:

http://somehost.tld/../../private_file.txt

resultaria em uma solicitação HTTP para:

http://somehost.tld/private_file.txt

Em outras palavras, alguém teria que criar manualmente uma solicitação HTTP para o ../.. para acessar o Apache. E isso volta com HTTP 400 Bad Request . Exemplo do meu servidor local (que não possui regras de reescrita):

ritsuko:~ spyder$ curl -v http://localhost/../randomfile
* About to connect() to localhost port 80 (#0)
*   Trying ::1... connected
* Connected to localhost (::1) port 80 (#0)
> GET /../randomfile HTTP/1.1
> User-Agent: curl/7.19.4 (universal-apple-darwin10.0) libcurl/7.19.4 OpenSSL/0.9.8l zlib/1.2.3
> Host: localhost
> Accept: */*
> 
< HTTP/1.1 400 Bad Request
< Date: Wed, 17 Feb 2010 13:18:40 GMT
< Server: Apache/2.2.13 (Unix) mod_ssl/2.2.13 OpenSSL/0.9.8l DAV/2
< Content-Length: 226
< Connection: close
< Content-Type: text/html; charset=iso-8859-1
< 
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>400 Bad Request</title>
</head><body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.<br />
</p>
</body></html>
* Closing connection #0
    
por 17.02.2010 / 14:20
0

o apache não permite "mover um diretório".

    
por 17.02.2010 / 14:06