viernes, 7 de octubre de 2011

Php Seguridad, como configurar (parte 1)

Mucho se habla de que php es vulnerable a muchos tipos de ataque, y yo creo que si, así que mejor nos cambiamos a asp no? XD es broma.

Lo mas difícil es cuando eres el desarrollador de sistemas y cuando hay un fallo o atacan el sitio el responsable eres tu, así que debes tener cuidado y peor es cuando al mismo tiempo eres el administrador de sistemas, en cuyo caso felicidades eres un brown eater XD, no también es broma.

Bueno ya en serio esta es la primera entrega de 3 en donde les mostrare algunas técnicas de seguridad que si bien no son la panacea a este problema si ayudan a mitigar severamente los agujeros de seguridad que no son propiamente atribuibles al lenguaje en muchas ocasiones es al administrador del sistema o al programador, hay dos posibles escenarios, el primero donde NO tengamos acceso a la configuración del servidor (que si no sabes que es no se que haces aquí) y el segundo pues obvio donde SI.

Ok en el primer escenario y si vamos a usar variables de sesión que tiene que ser así (otras alternativas para la persistencia de datos, no son optimas y suelen ser mas inseguras) ya que una aplicación php sin variables de sesión no llegara muy lejos ni sera potente, pero tiene un defecto y es que son secuestrables lo que se conoce como stealing cookie por medio del xss (cross-site scripting) por lo que JAMAS debemos enviar el id de sesión por url en otra ocacion hablaremos mas a ddetalle estas vulnerabilidades, ok entonces debemos crear un archivo de configuración una especie de config.php que deberá incluirse siempre en nuestros scripts que vayan a usar variables de sesión, las directivas que debemos afectar son:

 error_reporting(0); //con esto evitamos que se muestren los errores
  ini_set("expose_php",0); //evitamos mostrar demasiada informacion sobre nuestro servidor a los atacantes
  ini_set("session.save_path","path a donde el servidor guardara las sesiones");
  ini_set("session.name","cambiar el nombre de la cookie");
  ini_set("session.gc_probability",10);//aumentamos la probabilidad de que el garbage collector se incie
  ini_set("session.gc_divisor",100);
  ini_set("session.cookie_httponly",1); //la cookie no podrá ser accesada por javascript
  ini_set("session.hash_function",1); //con esto usara sha1 como generadora del id
  ini_set("session.use_cookies",1); //activamos el uso de sesiones por cookies
  ini_set("session.use_only_cookies",1); //obligamos a guardar el id de sesion en cookies
  ini_set("session.gc_maxlifetime",600); //reducimos el tiempo de duracion de la basura
  ini_set("session.cache_expire",int tiempo en minutos); //de la duracion de la sesion


por supuesto después de estas lineas de código debes usar session_start() que se encargara de iniciar el manejador de sesiones de php.

Por otro lado y esto ya no es por parte de php, pero no esta demás y si tienes servidor apache, generalmente la mayoría de los hosting te permitirán subir archivos .htaccess o si trabajas en sistemas exígele al administrador de sistemas si es que es un tipo no muy competente que configure y suba archivos .htaccess al sitio donde quedara tu web de forma que no se pueda acceder mas que localmente a los directorios donde tengas tus script sensibles, así solo el interprete podrá acceder a los scripts y no un navegador, el archivo tendrá un aspecto parecido a este:

 Order deny,allow
Deny from all
  Allow from localhost
 


Pero si es IIS entonces deberemos crear un archivo index.php que redireccione y saque del directorio que no quieres que vean al index correcto.

header("Location: ../home/index,php");

En la segunda entrega hablaremos del otro escenario donde tenemos el control del servidor y lo cual es mucho mejor aunque recae mas responsabilidad

No hay comentarios.:

Publicar un comentario