Recientemente me he encontrado con un par de respuestas populares relacionadas con PHP que sugirieron usar el superglobal $_REQUEST
, que considero un olor a código, porque me recuerda a register_globals
.
¿Puede proporcionar una buena explicación/evidencia de por qué $_REQUEST
es una mala práctica? Voy a arrojar un par de ejemplos que he desenterrado, y me gustaría más información/perspectiva sobre vectores de ataque teóricos y exploits del mundo real, así como sugerencias de pasos razonables que el administrador de sistemas puede tomar para reducir el riesgo (menos de reescribiendo la aplicación ... o, ¿tenemos necesidad de para ir a la gestión e insistir en una reescritura?).
Ejemplo vulnerabilidades: predeterminados GPC
matriz de mezcla de orden significa que los valores de cookie anulan GET y POST, por lo $_REQUEST
puede ser utilizado para ataques XSS y HTTP. PHP permite que las cookies vars sobrescriban las matrices superglobales. Las primeras 10 diapositivas de this talk dan ejemplos (toda la charla es genial). phpMyAdmin exploit ejemplo de ataque CSRF.
Ejemplo contramedidas: Reconfigurar $_REQUEST
matriz de mezcla de orden de GPC
a CGP
así GET/POST sobrescribir galleta, no al revés. Use Suhosin para bloquear la sobrescritura de superglobales.
(Además, no estaría preguntando si pensaba que mi pregunta era una víctima, pero afortunadamente la inmensa SO responder a "When and why should $_REQUEST be used instead of $_GET/$_POST/$_COOKIE?" fue "Nunca.")
También podría falsificar la publicación del formulario o las cookies. No hay nada especial acerca de POST of COOKIE que hace que sea más difícil parodiar que OBTENER. – Kibbee
Sin embargo, hay una cosa. Las variables GET se pueden usar como parte de un ataque CSRF. Solo permitiendo POST o COOKIE para ciertas cosas, hace que este tipo de ataque sea más difícil. – troelskn