A classe
HttpRequest
fornece acesso programático a variáveis das coleções
QueryString
,
Form
,
Cookies
ou
ServerVariables
sob a forma de um acesso de array (por exemplo,
Request["myParam"]
). Quando há mais de uma variável com o mesmo nome, o .NET Framework retorna o valor da variável que aparece primeiro quando as coleções são pesquisadas, na ordem seguinte:
QueryString
,
Form
,
Cookies
e depois
ServerVariables
. Como
QueryString
vem em primeiro lugar na ordem de pesquisa, é possível que parâmetros
QueryString
substituam valores de formulários, cookies e variáveis de servidor. Da mesma forma, valores de formulário podem substituir variáveis nas coleções
Cookies
e
ServerVariables
, enquanto variáveis da coleção
Cookies
podem substituir as de
ServerVariables
.
Exemplo 1: O código a seguir verifica a variável de servidor do cabeçalho HTTP Referer para ver se a solicitação é proveniente de
www.example.com
antes de apresentar o conteúdo.
...
if (Request["HTTP_REFERER"].StartsWith("http://www.example.com"))
ServeContent();
else
Response.Redirect("http://www.example.com/");
...
Suponha que o código no
Example 1
seja executado durante uma visita a
http://www.example.com/ProtectedImages.aspx
. Se um invasor realizar uma solicitação direta para a URL, o cabeçalho de referência adequado não será definido e a solicitação falhará. No entanto, se o invasor enviar um parâmetro
HTTP_REFERER
artificial com o valor necessário, como
http://www.example.com/ProtectedImages.aspx?HTTP_REFERER=http%3a%2f%2fwww.example.com
, a pesquisa retornará esse valor de
QueryString
em vez de
ServerVariables
, e a verificação será bem-sucedida.