1. ¡OFERTA! con cupón "DIRVPS": hosting por $0,01 y también VPS Linux y Windows por $0,01 el primer mes por Interserver ← publi
    Descartar aviso
Descartar aviso
Al usar este sitio web, aceptas que nosotros y nuestros socios podamos establecer cookies para fines tales como personalizar el contenido y la publicidad. Más información.

Como securizar un servidor PHP

Tema en 'Tutoriales Asuntos Técnicos' iniciado por hostingdiario, 6 Sep 2012.

  1. hostingdiario

    hostingdiario Usuario activo

    PHP es un lenguaje de programación orientado originalmente a la creación de páginas web dinámicas. Como bien sabemos, un hacker puede usar alguna vulnerabilidad de una aplicación PHP para realizar un ataque sobre nuestra web o en el peor de los casos sobre un servidor. A continuación te mostramos cómo securizar PHP.

    Cabe mencionar que existen muchas configuraciones distintas según el servidor, y muchos métodos para mejorar la seguridad de una máquina a nivel de PHP, en esta guía vamos a ver las más generales y básicas para PHP.

    Requiere: acceso root al servidor.
    Aplicable: cualquier servidor PHP.
    Nota: todas las modificaciones deben hacerse dentro del archivo php.ini del server, que dependiendo de la distro y configuración, estará en un lado u otro, generalmente en CentOS está en /etc/php.ini.
    Recuerda: lo haces bajo tu propio riesgo.

    1) Deshabilitar expose_php

    expose_php es una variable que permite mostrar qué versión de PHP está instalada en el servidor en la cabecera HTML. Por ende debe ir desactivada, así un atacante no podrá conocer qué versión de PHP usas. Debemos desactivar la variable configurándola como se ve a continuación:

    CODE, HTML o PHP Insertado:
    expose_php = Off
    
    2) Deshabilitar funciones peligrosas

    Hay algunas funciones que pueden llegar a suponer un riesgo para la seguridad del servidor. A no ser que alguna sean necesarias, deberían ser deshabilitadas las siguientes:

    CODE, HTML o PHP Insertado:
    disable_functions = "system, system_exec, passthru, shell, shell_exec, exec, popen, pclose, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, pfsockopen, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg, phpinfo"
    
    3) Deshabilitar session.use_trans_sid

    Con la variable session.use_trans_sid resulta más fácil la programación de aplicaciones que usen sessiones. La desventaja es que cuando está activado puede llegar a ser usado para simular una sesión activa en el server. Para desactivarlo debe quedar así:

    CODE, HTML o PHP Insertado:
    session.use_trans_sid = Off
    
    4) Deshabilitar register_globals

    register_globals no es una varible peligrosa, sino que lo peligroso es el uso inapropiado de ella, ya que inserta scripts con toda clase de variables, como por ejemplos las que proceden de formularios HTML. Se deshabilita de la siguiente forma:

    CODE, HTML o PHP Insertado:
    register_globals = Off
    
    En php 5.3.x ya viene deshabilitada por defecto.

    5) Desactivar acceso a URL remotas en funciones de manejo de ficheros

    Funciones como include, fopen o file_get_contents permiten, además de hacer llamadas a ficheros locales, llamar a ficheros vía URL, esto puede provocar graves errores de seguridad invocando a scripts maliciosos que se encuentran fuera de nuestro servidor y su ejecución remota. Para desactivar:

    CODE, HTML o PHP Insertado:
    allow_url_fopen = Off
    
    6) Safe Mode

    Activar safe_mode implica que los scripts PHP únicamente pueden acceder a los ficheros que tienen como propietario el mismo que ellos. De este modo evitamos por ejemplo que tengan acceso de lectura a ficheros de sistema como /etc/passwd entre otros.

    CODE, HTML o PHP Insertado:
    safe_mode = On
    
    Efectivamente, esto puede ser un problema en el momento que necesitamos acceder a información generada por otros usuarios en el sistema (ficheros de otras aplicaciones por ejemplo). La solución es la siguiente:

    CODE, HTML o PHP Insertado:
    safe_mode = Off
    safe_mode_gid = On
    Activamos safe_mode_gid en lugar de safe_mode, de modo que en lugar de revisar el usuario se revisa el grupo.

    Otro punto a tener en cuenta con safe_mode es que no podremos ejecutar binarios. Únicamente aquellos que ubiquemos en el directorio especificado en la configuración:

    CODE, HTML o PHP Insertado:
    safe_mode_exec_dir = /directorio
    7) Visualización y registro de errores

    CODE, HTML o PHP Insertado:
    display_errors = Off
    log_errors = On
    error_log = /ruta/fichero/log
    
    Con estas tres directivas, evitamos que cualquier error o warning se muestre por pantalla y hacemos que se registren directamente en un log especificado.

    8) Deshabilitar enable_dl

    Esta variable se usa solamente en conjunto con el servidor web Apache. Sirve para activar o desactivar la carga dinámica de extensiones PHP con dl() por servidor virtual o directorio. Con la carga dinámica, es posible ignorar todas las restricciones open_basedir. Para desactivarla debe quedar como:

    CODE, HTML o PHP Insertado:
    enable_dl = Off
    Eso sería todo por hoy ;)

    Recordemos que esto es una securización moderada de PHP, queda en tus manos aplicar otros métodos avanzados según lo requieras.
     
    A nonamef191118 le gusta esto.
  2.  
  3. Sphyr0

    Sphyr0 Usuario activo

    En general esta bien pero hay algunos puntos en los que discrepo. Por ejemplo...

    - Las "funciones" system_exec y leak no existen

    - Por que deshabilitar las conexiones persistentes (pfsockopen) y no tambien las normales? (fsockopen)

    - Por que deshabilitar escapeshellcmd y escapeshellarg?

    El obtener informacion de recursos externos no deberia suponer problemas (fopen, file, file_get_contents...), el que se incluya una URL externa si (include, require...), y para ello se debe deshabilitar la directiva allow_url_include

    - safe_mode es una directiva obsoleta desde php 5.3 y eliminada en la 5.4, en versiones anteriores "existe" pero actualmente quien las utiliza? ;)
     
    A nonamef191118 y Skamasle les gusta esto.
  4. Skamasle

    Skamasle Usuario activo

    Y que pasa con ini_set ? :/
     
    A AGoogler le gusta esto.
  5. AGoogler

    AGoogler Nuevo usuario

    Es una función que muchos sitios en plataformas como Joomla la usan, y scripts viejos que si lo desactivas los clientes te caen a patadas xD :cool:
     
    A nonamef191118 le gusta esto.
  6. La puedes desactivar y el cliente que la necesite se la activas a través del php.ini

    Salu2,
     
  7. Skamasle

    Skamasle Usuario activo

    Todo lo que han dicho lo se, pero digo lo de ini_set por que puede ser un riesgo de seguridad al igual que dejar el php.ini a los clientes, no tiene caso desactivar funciones en php.ini y dejar que el cliente use el php.ini para que luego los clientes activen las funciones.

    Y si joomla lo usa, vbulletin también, aveces es un problema pero bueno, hay que vivir con eso.

    Me parece que en vez de desactivar funciones es mejor "virtualizar" las cuentas de los clientes con jailshell, con eso ya son menos problemas de seguridad por un poco más de espacio usado.
     
    A nonamef191118 le gusta esto.


Alojamiento web, Hosting Reseller, Servidores Dedicados - All in Hosting


    
    
    
    
Blog · Sitios amigos: GuiaHosting · Unidominios · Interalta ·