Consejos de seguridad de endurecimiento de PHP para los servidores Linux

Consejos de seguridad de endurecimiento de PHP para los servidores Linux

No es más inteligente que Php es uno de los lenguajes de programación de script de servidor más utilizados. Tiene sentido que un atacante encuentre varias formas por las cuales puede manipular PHP, ya que a menudo se combina con Mysql y habilite el acceso a los datos privados de sus usuarios.

De ninguna manera, no estamos reclamando Php es vulnerable o tiene algunos problemas graves por defecto, pero tenemos que asegurarnos de ajustar Php de tal manera que puede ser más robusto que nunca.

1. Eliminar módulos PHP innecesarios

Por defecto, obtienes un conjunto de Php módulos que pueden ser útiles en varias tareas, pero algunos módulos innecesarios podrían no ser útiles para cada proyecto. Para enumerar disponible Php Módulos, utilice el comando dado:

$ php -m 
Lista de módulos PHP

Los módulos se encuentran en /etc/php.d/ directorio y puede cambiar fácilmente nuestro directorio actual a /etc/php.d/ mediante el siguiente comando de CD.

CD /ETC /PHP.d/ 

La razón por la que estamos cambiando el directorio para eliminar los módulos es que los módulos se nombran de manera bastante diferente en el directorio original. Ahora, enumere los módulos disponibles por el comando dado:

$ LS 
Verifique los módulos PHP

Por ejemplo, eliminemos el rizo módulo utilizando el comando dado:

$ sudo RM -R 20 -Curl.ini 

2. Deshabilitar la ejecución del código PHP remoto

En la mayoría de los casos, no se pueden confiar en las conexiones remotas. Deshabilitando el acceso a enchufar envoltorios, solo pueden acceder a archivos locales. Para deshabilitar Fopen, necesitamos abrir el archivo de configuración de PHP utilizando el comando dado:

$ sudo nano /etc /php.ini 

Ahora usa CRTL + W y escribir tampable_url_fopen que nos llevará a líneas específicas desde donde deshabilitaremos esas opciones.

pertual_url_fopen = offlow_url_include = apagado 
Deshabilitar la ejecución del código PHP remoto

Una vez que haya terminado con los cambios, guarde el archivo de configuración por CTRL + O y golpear Ingresar.

3. Deshabilitar la fuga de información de PHP

Cuando no está discapacitado, el mundo puede identificar fácilmente qué versión de Php actualmente es utilizado por nuestro servidor web. Puede que esto no parezca un gran problema, pero dejar que el atacante sepa la versión exacta puede ser peligrosa.

$ sudo nano /etc /php.ini 

Ahora, cambie los valores predeterminados a "Apagado".

expose_php = apagado 
Deshabilitar la fuga de información de PHP

4. Deshabilitar registros de errores de PHP

Por defecto, cada error de nuestro servidor web es visible para nuestros visitantes, incluidos los atacantes. Para garantizar que ninguno de los errores sea visible para nadie, tenemos que hacer cambios en nuestro archivo de configuración PHP.

$ sudo nano /etc /php.ini 

Y cambie la configuración predeterminada de la visualización de registros de errores a "Apagado".

display_errors = de 
Deshabilitar registros de errores de PHP

Pero, ¿qué pasa si eres un desarrollador y necesita tener registros de errores para superar los problemas de desarrollo?? No se preocupe, hay una manera de obtener sus archivos de registro simplemente haciendo un ligero cambio en el mismo archivo de configuración.

Solo tenemos que habilitar Log_errors y dar un camino a registro de errores donde se almacenarán nuestros archivos de registro.

log_errors = en error_log =/var/log/httpd/php_scripts_error.registro 
Habilitar registros de errores en PHP

5. Control de recursos PHP

Según nosotros, la gestión de los recursos es la parte más crucial al asegurar Php. Aquí, vamos a asignar una cantidad fija de tiempo de ejecución, tiempo de entrada y límite de memoria, por lo que si de alguna manera nuestro script se compromete, la ejecución se detendrá después de un cierto tiempo.

Hemos elegido 25 segundos para la ejecución y tiempo de entrada y 30 MB de límite de memoria. Seguro que puede personalizarlo según sus necesidades.

max_execution_time = 25 max_input_time = 25 memoria_limit = 30m 
Control de recursos PHP

6. Restringir el acceso al archivo PHP

Para restringir el acceso a los archivos, vamos a habilitar Open_BaseDir que asegurará que PHP solo pueda incluir archivos de nuestros directorios enumerados.

Importante: Esto bloqueará todos los demás directorios y requiere que agregemos directorios importantes manualmente, lo que también incluye agregar archivos temporales y directorios de sesión.

Open_Basedir = "/home/sagar/public_html:/var/lib/php/tmp_upload:/var/lib/php/session" 
Control de acceso al archivo PHP

7. Configurar cargas de archivos PHP

Si su aplicación no requiere cargar archivos desde el final del usuario, siempre se recomienda deshabilitar las cargas de archivos. Esto evita que los atacantes carguen scripts peligrosos que podrían terminar dañando toda la aplicación al final.

file_uploads = apagado 

Pero, ¿qué pasa si su aplicación está diseñada para obtener archivos desde el final del usuario?? En ese caso, debe habilitar las cargas de archivos, pero intente reducir el espacio máximo y reducir el número de archivos máximos que se pueden cargar desde una sola solicitud.

file_uploads = en upload_max_filesize = 1m max_file_uploads = 1 
Control de las cargas del archivo PHP

En PHP, por defecto, los archivos temporales se colocan en un directorio que todos los usuarios del sistema pueden escribir. La ubicación predeterminada debe cambiarse a un lugar más seguro y asegurarse de que no se encuentre dentro de la raíz web.

Como hemos utilizado Open_BaseDir, Usaremos la misma ubicación que ya lo hemos con la lista blanca.

upload_tmp_dir =/var/lib/php/tmp_upload 

8. Deshabilitar funciones PHP peligrosas

PHP tiene varias funciones habilitadas de forma predeterminada y puede ser útil para fines de desarrollo. Pero los hackers pueden utilizar muchas funciones para explotar nuestro servidor web y deshabilitarlas agregará una capa de seguridad.

Tenemos un conjunto de funciones deshabilitados y nos aseguramos de verificarlas cruzadas antes de hacer cambios en el archivo de configuración.

disable_functions = exec, passthru, shell_exec, sistema, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source 
Deshabilitar funciones de PHP no deseadas

9. Cambiar el directorio de caché de jabón

A medida que cambiamos el directorio y la sesión TEMP predeterminados, lo mismo se aplica al JABÓN caché, ya que no debe guardar en el directorio predeterminado. Asegúrese de que se guarde en un lugar seguro.

jabón.wsdl_cache_dir =/var/lib/php/soap_cache 
Cambiar el directorio de caché de jabón

10. Control de la publicación de PHP

Controlando CORREO Tamaño, podemos asegurar nuestro servidor de un hacker que intenta coagular los recursos del servidor enviando archivos enormes. Esto nos ahorra de bloqueos de servidor no deseados y tiempo de respuesta lento.

post_max_size = 4m 
Limite el tamaño de la publicación de PHP

11. Proteger las configuraciones de PHP

Mientras eliminamos archivos innecesarios, a menudo eliminamos algunos archivos cruciales o incluso directorios. Por lo tanto, debemos ajustar la configuración de tal manera que incluso los usuarios raíz no puedan eliminarlos. Para hacer archivos y directorios, utilizaremos chattr con diferentes banderas.

Una vez que usa el comando dado, ya no puede modificar un archivo específico o eliminarlo.

$ sudo chattr +i /etc /php.ini 

Al intentar eliminar un archivo inmutable, mostrará un error diciendo "operación no permitida".

$ sudo rm -r /etc /php.ini 
Operación no permitido error

Pero, ¿qué pasa si quieres seguir escribiendo esos archivos mientras los haces inmutables?? Puedes lograrlo fácilmente usando el +a bandera en lugar de +i.

$ sudo chattr +a /etc /php.ini 

Puede haber algunos casos en los que ya no necesite el archivo de configuración anterior y, en ese caso, tenemos que no tener atributos.

$ sudo chattr -i /etc /php.ini 

Del mismo modo, si fuiste con +a Atributos En el proceso de hacer que los archivos sean inmutables, puede revertirlo utilizando el comando dado:

$ sudo chattr -a /etc /php.ini 

12. Use certificados SSL para HTTPS

Hoy en día, cada navegador moderno como Google Chrome, Firefox, Opera y otros recomiendan usar Https para servidores web. Como Https Proporciona un canal de acceso seguro y encriptado para sitios no confiables, podemos proporcionar una experiencia confiable a nuestros usuarios.

Añadiendo Https, Podemos protegerse contra XSS ataques que incluyen evitar que los piratas informáticos lean datos transportados utilizando códigos.

Para habilitar HTTPS, instalaremos y usaremos el gratuito Vamos a cifrar el certificado SSL en el servidor.

$ sudo dnf instalación epel-libra $ sudo dnf instalación certbot python3-certbot-apache mod_ssl $ sudo certbot --apache -d dominio.com [para apache] $ sudo certbot -nginx -d dominio.com [para Nginx] 

13. Actualizar PHP regularmente

Como es un idioma de código abierto, se repara casi día a día. Puede que no parezca un paso muy importante, pero puede salvarlo de una gran vulnerabilidad. Así que asegúrese de mantener actualizados sus paquetes PHP, lo que le ahorrará de muchas vulnerabilidades posibles.

# Yum Update & Yum Actualade [en sistemas basados ​​en RHEL] # apt Update && apt Upgrade [en sistemas basados ​​en Debian] 

Esta fue nuestra opinión sobre cómo puede mejorar fácilmente la seguridad de Php En sistemas de Linux. A lo largo de este tutorial, hemos tratado de simplificar las cosas y si aún tiene alguna duda, háganos saber en los comentarios.