php - valor - ¿Por qué debería usar $_GET y $_POST en lugar de $_REQUEST?
recibir variables get php (7)
la inseguridad a menudo mencionada de $ _REQUEST es falsa. todas estas son formas de obtener datos del usuario, que tiene una máquina no segura. siempre tiene que desinfectar la entrada, por lo que no hay una ventaja de seguridad real al usar cualquiera de ellos.
solo es significativo si tiene diferentes usos para los valores con el mismo nombre en diferentes canales. en ese caso, debe cambiar el nombre de algunos de ellos de todos modos.
Esta pregunta ya tiene una respuesta aquí:
- ¿Qué pasa con el uso de $ _REQUEST []? 14 respuestas
Además del hecho de que $_REQUEST
lee de las cookies, ¿hay alguna razón por la que deba usar $_GET
y $_POST
lugar de $_REQUEST
? ¿Cuáles son los motivos teóricos y prácticos para hacerlo?
El uso de $ _REQUEST abre algunos vectores de ataque a su aplicación donde las variables pueden sobrescribirse donde no le gustaría que ocurriera.
También considere la orden GPC (Obtener, Publicar, Cookie) en la que se llenará $ _REQUEST.
es decir, una solicitud con:
$_GET[''foo''] = ''bar''
$_POST[''foo''] = ''baz''
resultará en
$_REQUEST[''foo''] == ''bar''
Usted ya dio una de las respuestas, entonces le daré otra:
Es más una elección estilística. Por ejemplo, generalmente no desea que la información que cambia el estado en el servidor sea almacenable en caché, por lo que probablemente desee restringirla a las variables $_POST
.
Yo uso $ _REQUEST cuando solo quiero ciertos datos del usuario para devolver ciertos datos.
Nunca use $ _REQUEST cuando la solicitud tenga efectos secundarios. Las solicitudes que producen efectos secundarios deben ser POST (por razones semánticas, y también por cuestiones básicas de CSRF, una etiqueta img falsa puede golpear cualquier punto final GET sin que el usuario siquiera lo sepa).
$ _GET se debe usar cuando GETing o POSTing a una página producirán resultados diferentes.
Además del hecho de que $ _REQUEST lee de las cookies
Además del hecho de que esto no está definido (es configurable en un nivel por instalación), el problema al usar $_REQUEST
es que simplifica demasiado las cosas. Existe (o debería haber) una diferencia semántica entre una solicitud GET y una solicitud POST. Por lo tanto, debería importarle a su aplicación si recibe información de una fuente u otra. Así es como se define el protocolo HTTP, por lo que al ignorarlo, está socavando el protocolo, lo que hace que su aplicación sea menos interoperable. Es el mismo argumento de tipo que se puede hacer para usar el marcado HTML semántico, en lugar del marcado orientado a la presentación. O más generalmente, siguiendo las intenciones de un protocolo en lugar de simplemente hacer lo que funcione en la situación concreta.
HTTP GET está destinado semánticamente a ser utilizado para buscar una página, mientras que POST puede argumentarse que, cuando se usa, es de esperar que se modifique algún tipo de estado.
Por ejemplo, existe la expectativa de que el uso de GET con los mismos parámetros varias veces produzca los mismos resultados, mientras se usa POST, puede que no.
No usa POST cuando debe ceder a los problemas. Creo que las bibliotecas AJAX de Ruby on Rails usaron GET en lugar de POST, y provocaron que se perdieran muchos datos al ser tocados por arañas web.
Por lo tanto, probablemente debas evitar usar $ _REQUEST. Debe conocer los propósitos de lo que hace la página y decidir cómo responder una solicitud GET, y cómo responder una solicitud POST.
Aquí hay uno que acabo de encontrar: ¿ Cuándo y por qué debería usarse $ _REQUEST en lugar de $ _GET / $ _POST / $ _COOKIE? . Lamento no haberlo encontrado antes, así que no habría hecho la pregunta ...