Com perjudicar el vostre PHP per millorar la seguretat

PHP és àmpliament utilitzat entre molts llocs & les aplicacions, però s’han d’endurir per a la seguretat. Aquí teniu alguns consells avançats per protegir el vostre fitxer de configuració PHP.


Com endurir el PHP

PHP és de lluny el llenguatge de programació de fons web més popular en ús avui dia. Fins ara, més El 80% dels llocs amb un backend implementar PHP. WordPress, Joomla i Drupal són recolzats. Malauradament, PHP s’ha convertit en un objectiu popular dels intents de pirateria, per la qual cosa és fonamental assegurar-ne la configuració. Seguiu aquests senzills passos per endurir la vostra configuració de PHP i per protegir-la contra les vulnerabilitats de pirateria.

Localitzeu el fitxer de configuració de PHP

El nom del fitxer de configuració de PHP és php.ini, que haureu d’editar. La ubicació del fitxer varia en funció de la vostra empresa de hosting i del tipus de servidor.

Edita amb Hosting compartit

Si no sabeu on es troba el fitxer php.ini, poseu-vos en contacte amb el vostre proveïdor d’allotjament. Alguns proveïdors requereixen que col·loqueu la configuració de PHP dins del fitxer “.htaccess” de l’arrel del web. Si aquest és el cas, els paràmetres de PHP haurien d’afegir-ne una per línia en el format “valor php_value Name”. Tingueu en compte que el vostre proveïdor d’allotjament pot evitar que es puguin modificar algunes configuracions.

Edita amb un servidor VPS o dedicat

Web Host Manager (WHM) simplifica el procés d’edició del fitxer de configuració PHP proporcionant una interfície d’usuari senzilla. Simplement busqueu la secció “Configuració del servei” a WHM i feu clic a “Editor de configuració PHP”. A la pàgina que apareix, seleccioneu “Mode avançat”.

Editor de configuració de PHP

Si no utilitzeu un tauler de control com WHM, haureu d’obrir i editar directament php.ini. La ubicació de php.ini variarà en funció del sistema operatiu del vostre servidor. Molts sistemes Linux situen el fitxer a la ruta “/etc/php.ini”. Podeu confirmar la seva ubicació mitjançant la línia d’ordres. Comenceu per iniciar la sessió al servidor mitjançant SSH (poseu-vos en contacte amb el proveïdor d’allotjament per obtenir instruccions). Un cop connectat, introduïu la comanda “php –ini” i premeu Enter. Cerqueu la línia retornada titulada “fitxer de configuració carregat” i preneu nota del camí del fitxer php.ini.

Podeu obrir i editar php.ini mitjançant un editor de text que s’executa dins de la línia d’ordres, com “nano” per a Linux. Simplement escriviu “nano /path/to/php.ini” i premeu Enter.
Nano per a Linux

php.ini Estructura

Dins php.ini, cada configuració es col·loca en la seva pròpia línia en el format “settingsname = settingvalue”. Qualsevol línia que comenci amb un punt i coma és un comentari, així que no actualitzeu cap d’aquestes línies.

Edita la configuració de configuració

A continuació, es mostra una llista de configuracions que han de revisar i actualitzar per millorar la seguretat. La configuració s’agrupa en diverses seccions a continuació en funció del seu propòsit.

Secció 1: Connexions remotes

allow_url_fopen = 0
allow_url_include = 0

No permetis que els embolcalls fopen obrin URL remots. No sempre es pot confiar en el contingut remot; Si es desactiva aquestes opcions es garanteix que els embolcalls fopen només poden carregar contingut local.

Secció 2: Configuració d’execució

max_input_time = 30
màxima_execució_hora = 30

Limiteu el temps màxim permès per processar les entrades, així com la quantitat màxima de temps que pot executar un script PHP. Aquí, ambdues configuracions s’estableixen en un límit de 30 segons. Això garanteix que, en cas que un guió es veiés compromès, no llegiria entrades ni s’executaria durant un període de temps més llarg. Un script ben codificat no hauria de requerir més de 30 segons per executar-se.

memòria_limit = 8M

Assegureu-vos que un script PHP no utilitzi més de 8 MB de memòria. En cas que un script es veiés compromès, aquesta configuració limita eficaçment la quantitat de memòria que pot utilitzar el script.

register_globals = desactivat

Si es desactiva aquesta configuració, es prohibeix que les dades de la sol·licitud s’emmagatzemen automàticament com a variable. El registre de variables globals planteja diverses preocupacions; un exemple és que es poden modificar fàcilment les variables d’entorn. Per evitar aquests problemes, assegureu-vos que aquesta configuració està desactivada.

expose_php = 0

Per defecte, la presència de PHP i el número de versió són exposats com a part de les respostes HTTP. Com que això proporciona una visió innecessària del servidor, és recomanable desactivar-la.

cgi.force_redirect = 1

Assegureu-vos que PHP només es pugui executar mitjançant una regla de redirecció del servidor web. D’aquesta manera s’evita que s’anomenin directament PHP, cosa que millora la seguretat.

Secció 3: Restriccions de dades d’entrada

post_max_size = 256K
max_input_vars = 100

Els pirates informàtics poden intentar inundar els recursos d’aplicacions web enviant-hi dades massives, cosa que pot reduir la velocitat de transferència i els recursos del servidor disponibles. L’efecte d’aquest tipus d’atac es pot minimitzar reduint la mida màxima de dades de POST i també limitant la quantitat de dades de sol·licitud. Tingueu en compte que “post_max_size” també afecta la mida màxima de càrregues de fitxers; si la vostra aplicació té capacitats de càrrega de fitxers, assegureu-vos que el valor d’aquesta configuració és almenys tan gran com “upload_max_filesize”.

Secció 4: Gestió d’errors

display_errors = 0
display_startup_errors = 0

Els missatges d’error mai no s’han de mostrar a l’usuari final, ja que els missatges sovint contenen informació detallada sobre el codi i el servidor de l’aplicació. Aquesta informació podria ser utilitzada per ajudar els pirates informàtics. En lloc d’això, registreu missatges d’error en un fitxer segur del servidor.

log_errors = 1
error_log = / home / johndoe / error_log

S’han de registrar errors de PHP per depurar el codi de l’aplicació i investigar si hi ha vulnerabilitats potencials. Si utilitzeu un gestor de fitxers com el que s’inclou amb cPanel, una ubicació adequada i segura per al registre d’errors es troba directament fora de l’arrel web.

Secció 5: Restringiu l’accés als fitxers

open_basedir = "/ home / johndoe / public_html"

Open_basedir garanteix que PHP pot incloure fitxers només dins dels directoris llistats. Això millora la seguretat evitant que els scripts PHP accedeixin involuntàriament a fitxers segurs fora dels camins de llista blanca. Tingueu en compte que heu d’afegir tots els directoris als que PHP necessita accedir a la llista blanca, inclosos els directoris de sessió de càrrega temporal i fitxers (vegeu més avall). Podeu afegir diversos directoris a la llista col·locant dos punts entre cada directori. Per exemple:

open_basedir = "/ home / johndoe / public_html: / var / lib / php / tmp_upload: / var / lib / php / session"

Secció 6: Càrregues de fitxers

file_uploads = 0

Si la vostra aplicació no conté funcionalitat per penjar fitxers dels ordinadors dels usuaris, és recomanable desactivar aquesta funció PHP del tot. Això ajuda a evitar que els pirates informàtics puguin carregar scripts que després s’injectin a l’aplicació.

file_uploads = 1
upload_max_filesize = 1M

Si la vostra aplicació requereix funcions de càrrega de fitxers, manteniu “upload_max_filesize” al mínim d’un valor possible.

upload_tmp_dir = / var / lib / php / tmp_upload

De manera predeterminada, les càrregues temporals de fitxers es col·loquen en un directori que tots els usuaris del sistema poden escriure. La ubicació s’ha de canviar a un directori més segur. Assegureu-vos que la ubicació nova del directori no estigui situada a l’arrel del web. Si utilitzeu un gestor de fitxers com el que s’inclou amb cPanel, una ubicació fàcil i segura per crear el directori de càrrega es troba directament fora de l’arrel web (és a dir, el mateix directori que public_html hi ha). Una altra ubicació segura és crear el directori dins del directori PHP a “/ var / lib”. La ruta depèn del sistema operatiu, és a dir, “/ var / lib / php” o “/ var / lib / php5”. Si teniu efectives restriccions open_basedir, assegureu-vos que el directori de càrrega temporal s’inclogui a la llista blanca open_basedir.

Secció 7: Seguretat de sessió

Les sessions s’utilitzen per preservar informació de diverses sol·licituds d’usuaris individuals. La informació real s’emmagatzema al servidor i s’utilitza una cookie (o, amb menys seguretat, dades de sol·licitud HTTP) que conté un ID de sessió per validar els usuaris. Les sessions s’utilitzen per a propòsits, com ara l’autenticació en una aplicació web, i és per això que és tan important la seva seguretat. La configuració següent es pot actualitzar per reduir el risc d’intercepció de sessions.

session.use_strict_mode = 1

Creeu un nou identificador de sessió si el navegador envia un identificador no inicialitzat prèviament. Això ajuda a prevenir un atac anomenat fixació de sessió.

session.cookie_httponly = 1

Permet que la galeta de sessió només sigui accessible des d’una sol·licitud HTTP i no des d’altres fonts, com ara JavaScript. Això ajuda a prevenir un atac anomenat atac XSS.

session.use_cookies = 1
session.use_only_cookies = 1
session.use_trans_sid = 0

Deseu l’ID de sessió en una galeta, en lloc d’enviar-lo com a paràmetre URL. Això ajuda a mantenir la sessió d’un usuari segura evitant atacs de fixació de sessió.

session.name = personalització_sessió_id

Les cookies emmagatzemen la seva informació en format de valor clau. És recomanable actualitzar el nom de clau predeterminat de la galeta que emmagatzema l’ID de sessió. Actualitzeu “custom_session_id” amb un valor personalitzat.

session.cookie_secure = 1

Si la vostra aplicació web sobrepassa el protocol HTTPS per a la seguretat, activeu aquesta configuració per obligar les cookies que contenen identificadors de sessió a accedir només mitjançant una connexió segura..

session.referer_check = exemple.com

Comproveu d’on venia la sol·licitud per determinar si permetre l’accés a les dades de la sessió. Actualitzeu aquest valor de configuració al nom de domini de l’aplicació per evitar que s’accedeixi a la informació de la sessió si un script es carrega des d’una font externa.

sessió.save_path = "/ var / lib / php / sessió"

La ruta de guarda del fitxer de sessió predeterminat és escrivible per tots els usuaris del sistema. La ubicació s’ha de canviar a un directori més segur. Assegureu-vos que la ubicació nova del directori no estigui situada a l’arrel del web. Si utilitzeu un gestor de fitxers com el que s’inclou amb cPanel, una ubicació fàcil per crear el directori de sessió es troba directament fora de l’arrel web (és a dir, el mateix directori que es troba public_html). Una altra ubicació segura és crear el directori dins del directori PHP a “/ var / lib”. La ruta depèn del sistema operatiu, és a dir, “/ var / lib / php” o “/ var / lib / php5”. Si teniu efectives restriccions open_basedir, assegureu-vos que la ruta de desat de sessió s’inclogui a la llista blanca open_basedir.

session.hash_function = sha512

SHA-512 és un algorisme de hashing més segur per crear IDs de sessió en comparació amb la funció de hash MD5 per defecte. Aquest algorisme està disponible a la versió 5.3+ de PHP. Si teniu una versió menor de PHP, utilitzeu l’algorisme SHH1 hash. Per fer-ho, configureu “session.hash_function = 1”.

sessió.bug_compat_42 = 0
session.bug_compat_warn = 0

Si es desactiva aquesta configuració, es garantirà que les variables de sessió no es puguin inicialitzar globalment, cosa que millora la seguretat.

Desactiva funcions vulnerables

disable_functions = ini_set, php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, set_time_limit, exec, system, highlight_file, source, show_source, fpaththru, virtual, posixix, virtual, posixix posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix, _getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo, popen, curl_exec, curl_multi_exec, parse_ini_file, allow_url_fopen, allow_url_ppch, pcch, pv, chc

Si no s’utilitza acuradament, diverses funcions PHP poden proporcionar portes obertes per a aplicacions web d’aplicacions web. Per exemple, l’enviament d’entrades validades incorrectament a moltes d’aquestes funcions produeix problemes de seguretat. Desactivar aquestes funcions és una solució senzilla i eficaç al problema. Tanmateix, si la vostra aplicació requereix alguna de les funcions enumerades, elimineu-la de la llista.

Sabó de memòria cau

soap.wsdl_cache_dir = / var / lib / php / soap_cache

Com passa amb les càrregues de fitxers i les dades de sessió, les dades de memòria cau SOAP no s’han d’emmagatzemar al directori temporal per defecte. Configureu-ho a un directori més segur.

Reinicieu PHP

Després de fer canvis al fitxer php.ini, haureu de reiniciar el servidor web. WHM proporciona un botó per reiniciar el servidor després d’editar el fitxer. Si no utilitzeu un tauler de control, com WHM, haureu de reiniciar el servidor mitjançant la línia d’ordres. Per a Apache, introduïu la comanda “sudo apachectl graceful” i premeu Enter.

Conclusió

Actualitzant aquesta configuració, el vostre entorn PHP continua estant protegit dels intents de pirateria. Protegir el vostre entorn PHP dels pirates informàtics és un pas important per protegir la reputació de l’empresa. Tingueu en compte, però, que una aplicació mal codificada és sempre una porta oberta als hacks, fins i tot amb una configuració de PHP endurida. Comença per mantenir la configuració endurida i, des d’aquí, escriu sempre un codi d’aplicació segur.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map