La clase
HttpRequest
proporciona acceso programático a las variables procedentes de las colecciones
QueryString
,
Form
,
Cookies
o
ServerVariables
en la forma de un acceso de matriz (p. ej.
Request["myParam"]
). Cuando existe más de una variable con el mismo nombre, .NET Framework devuelve el valor de la variable que aparece primero cuando se buscan las colecciones en el siguiente orden:
QueryString
,
Form
,
Cookies
y
ServerVariables
. Como
QueryString
está primero en el orden de búsqueda, los parámetros
QueryString
pueden sustituir los valores de variables de servidor, cookies y formularios. Del mismo modo, los valores de formularios pueden reemplazar las variables de las colecciones
Cookies
y
ServerVariables
, y las variables de la colección
Cookies
pueden reemplazar las de
ServerVariables
.
Ejemplo 1: el siguiente código comprueba la variable del servidor del encabezado de referencia HTTP para ver si la solicitud proviene de
www.example.com
antes de proporcionar contenido.
...
if (Request["HTTP_REFERER"].StartsWith("http://www.example.com"))
ServeContent();
else
Response.Redirect("http://www.example.com/");
...
Supongamos que el código en el
Example 1
se ejecuta al visitar
http://www.example.com/ProtectedImages.aspx
. Si un atacante realiza una solicitud directa a la URL, no se establecerá el encabezado de referencia correspondiente y la solicitud no se cumplirá. No obstante, si el atacante envía un parámetro
HTTP_REFERER
artificial con el valor requerido, como
http://www.example.com/ProtectedImages.aspx?HTTP_REFERER=http%3a%2f%2fwww.example.com
, la búsqueda devolverá el valor de
QueryString
en lugar de
ServerVariables
y se realizará la comprobación.