Comparte esta noticia Enlace permanente
Etiquetas: hosting, seguridad, Webs, white paper, wordpress
El lenguaje de programación PHP es actualmente el más utilizado a escala mundial a la hora de realizar portales web. Herramientas open source como WordPress, Moodle o tiendas online como Prestashop o Magento, están desarrollada bajo esta tecnología gracias a las muchas opciones que ofrece, opciones que en muchos casos pueden ser configuradas desde su archivo PHP.INI, que será el protagonista a lo largo de este White Paper.
Descargar White Paper: 'php.ini, el archivo de configuración de PHP'
¿Qué es el archivo php.ini?
Entre todos los archivos que forma parte de la instalación del lenguaje PHP, hay uno que destaca sobre el resto debido a su importancia a la hora de trabajar con este lenguaje. Se trata del archivo php.ini, un fichero que contiene la configuración de PHP que vamos a utilizar en el servidor donde alojemos nuestro portal.
Este archivo lo solemos encontrar dentro del directorio donde hemos realizado la instalación de la distribución PHP. Se trata de un archivo de texto que puede ser editado con cualquier editor de texto simple que tengamos instalado en nuestro equipo y una vez que lo editemos, nos encontraremos con un gran número de líneas de texto. Estas líneas las podemos clasificar de la siguiente forma:
- Líneas que comienzan por punto y coma (;). Suelen tratarse de comentarios explicando el funcionamiento de ciertas directivas, siendo todas ellas ignoradas.
- Texto marcado con corchete. Por ejemplo [PHP] que indican la cabecera de una determinada sección.
- Directivas. Es la parte más importante de este archivo y están formadas por una pareja compuesta por una clave y su determinado valor. Por ejemplo “una_directirva = off”. A la hora de modificar una directiva, hay que tener presente que las mayúsculas y minúsculas no son lo mismo, es decir que “Una_directiva = on” es diferente a “una_directiva = on”.
Se puede dar el caso de que tengamos directivas con un punto y coma al principio. Esto quiere decir que están comentadas y que no son tenidas en cuenta a la hora de trabajar con PHP. Si las quisiéramos utilizar, deberíamos eliminar el punto y coma del principio.
¿Dónde está ubicado mi archivo php.ini?
Anteriormente hemos dicho que el archivo php.ini está ubicado en el directorio donde se realizó la instalación de PHP. En muchos casos, a la hora de contratar un servidor dedicado con alguna empresa de hosting, la instalación de PHP viene ya instalada, por lo que si queremos conocer su ubicación y no volvernos loco buscándolo por todo el sistema, lo más sencillo es ejecutar la sentencia “phpinfo()” de php, que nos muestra los valores de configuración de ese archivo, así como su ubicación entre otras muchas cosas.
Para eso, en un fichero con extensión “.php” escribimos el siguiente código.
<?php phpinfo(); ?>
Al ejecutar ese código, obtendremos una pantalla como la que os dejamos a continuación.
En ella podéis ver la ruta donde está ubicado nuestro archivo y el que deberemos editar para cambiar cualquier configuración de nuestro PHP.
Ejemplos de directivas dentro de php.ini
El archivo php.ini engloba un gran número de directivas orientadas a diferentes aspectos, como puede ser la subida de archivos vía HTTP, otras relacionadas con directorios y archivos o algunas relacionadas con los límites de recursos que pueden utilizar los scripts programados en PHP. A continuación os dejaremos un listado a modo de ejemplo de las que nos podemos encontrar, pero podéis ver muchas más en la sección de directivas dentro de la página oficial de PHP.
- max_execution_time. Mediante esta directiva indicamos el tiempo máximo que un script podrá estar ejecutándose antes de que sea cancelado. El tiempo es indicado en segundos.
- memory_limit. En esta directiva, lo que indicamos es la memoria que se podrá utilizar para la ejecución del código que forma parte de la web.
- post_max_size. Se trata de la directiva que permite controlar el tamaño de los datos enviados mediante POST, afectando también a los archivos que se subirán al servidor mediante programación. Si el archivo supera el límite indicado, dará un error y no se subirá.
- Aquí definiremos el tiempo máximo que puede estar PHP procesando la entrada de datos. El valor por defecto es de 60 segundos.
- upload_max_filesize. Esta directiva lo que controla es el tamaño máximo de ficheros que se puede subir a la web de forma simultánea. Se puede subir uno o más de uno siempre y cuando no se supere el valor indicado aquí.
- default_charset. En esta directiva se le puede indicar el tipo de codificación que se utilizará por defecto, siendo el de por defecto UTF-8.
- include_path. Especifica la lista de directorios donde las funciones require, include, fopen(), file(), readfile() y file_get_contents() buscarán ficheros. Permite una lista de directorios separados por punto y coma.
- file_uploads. Si permite o no la subida de archivos vía HTTP.
- upload_tmp_dir. Aquí indicaremos el directorio temporal utilizado durante el proceso de subida de los archivos. Si no se especifica, PHP utilizará el de por defecto del sistema.
- max_file_uploads. El máximo número de archivos que se podrán subir de forma simultánea.
Consejos para hacer más segura la instalación de PHP
Como ocurre con la mayoría de las aplicaciones informáticas que utilizamos, es importante tomar las medidas necesarias para hacerlas lo más seguras posible. En el caso de PHP, además de tenerlo siempre actualizado a la última versión estable disponible, podemos hacerla algo más segura desde el propio archivo php.ini.
1.- Ocultar la versión de PHP
Lo que se intenta con esta medida es que no se pueda saber la versión de PHP que corre en un determinado servidor haciendo un simple telnet. De esta forma evitaremos que terceras personas puedan conocer la versión que se utiliza para encontrar vulnerabilidades y llevar a cabo algún tipo de ataque. Por tanto conviene cambiar a off la directiva “expose_php”.
2.- Deshabilitar sesión ID en la URL
En ocasiones no queremos que en las direcciones aparezcan los IDs de las sesiones. Para ello debemos cambiar el valor de la directiva “session.use_trans_sid” y ponerlo a off. De esta forma en vez de tener en la barra de direcciones: http://miempresaweb.es/?PHPSESSID=4kgj577sgabvnmhjgkdiuy1956if6ska
Tendríamos: http://miempresaweb.es
3.- Desactivar acceso a URL remotas desde funciones de manejo de ficheros
Funciones de PHP como “include”, “fopen” o “file_get_content”, además de llamar a archivos locales, permiten llamar a archivos remotos. Esto puede ser un grave problema de seguridad, pero lo podemos evitar modificando el valor de “allow_url_fopen” y poniéndolo a off.
4.- Directiva open_basedir
Mediante la configuración de esta directiva, indicamos que PHP pueda acceder únicamente a los ficheros contenidos en el directorio indicado (y sus subdirectorios). De esta forma nos garantizamos que no se pueda acceder a sitios que no correspondan. El uso de esta directiva sería de la forma que os indicamos a continuación.
open_basedir = /directorio_con_acceso
5.- Visualización y registros de errores
Es posible configurar PHP para que en caso de que se produzca algún error, no se muestre por pantalla sino que se almacene en un log cuya ruta le indiquemos. Con esto evitamos que se muestre por pantalla información que puede llegar a ser crítica. Para evitar que se muestre esta información, es necesario modificar estas tres directivas que os dejamos a continuación.
display_errors = Off
log_errors = On
error_log = /ruta/fichero/log
Modificando el valor de “display_errors” a “on” volveríamos a configurarlo para que se mostrase los errores por pantalla. Esto es bueno mientras que se esté depurando la aplicación.
6.- Desactivar funciones peligrosas
También es posible desactivar ciertas funciones de PHP por temas de seguridad. Para conseguir esto, es necesario modificar la directiva “disable_functions”, a la que se le asigna un listado de funciones separadas por comas (,).
disable_functions=”system,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,pcntl_exec”
En este WhitePaper hemos hablado del archivo php.ini, archive desde donde configuramos determinados aspectos de la instalación de PHP, y donde deberemos acudir cuando queramos modificar el comportamiento de nuestro intérprete PHP.