Как да втвърдите PHP за по-добра сигурност

PHP се използва широко сред много сайтове & приложения, но трябва да бъдат втвърдени за сигурност. Ето някои разширени съвети за осигуряване на вашия PHP конфигурационен файл.


Как да се втвърди PHP

PHP е най-популярният език за програмиране в интернет, който се използва днес. Към днешна дата над 80% от сайтовете с бекенд внедрете PHP. WordPress, Joomla и Drupal са подкрепени от него. За съжаление PHP се превърна в популярна цел за хакерски опити, поради което осигуряването на конфигурацията му е от решаващо значение. Следвайте тези прости стъпки, за да втвърдите вашата PHP конфигурация и да я защитите от хакерски уязвимости.

Намерете PHP конфигурационния файл

Името на конфигурационния файл за PHP е php.ini, което ще трябва да редактирате. Местоположението на файла варира в зависимост от вашата хостинг компания и типа сървър.

Редактиране със споделен хостинг

Ако не сте сигурни къде се намира файлът ви php.ini, свържете се с вашия доставчик на хостинг услуги. Някои доставчици изискват да поставите PHP настройките във файла „.htaccess“ в уеб корен. В този случай настройките на PHP трябва да се добавят по един на ред във формата „php_value Name value“. Имайте предвид, че вашият доставчик на хостинг услуги може да предотврати промяна на определени настройки.

Редактиране с VPS или специален сървър

Web Host Manager (WHM) опростява процеса на редактиране на конфигурационния файл на PHP, като предоставя прост потребителски интерфейс. Просто намерете секцията „Конфигурация на услугата“ в WHM и щракнете върху „Редактор на конфигурация на PHP“. На страницата, която се показва, изберете „Разширен режим“.

PHP редактор за конфигуриране

Ако не използвате контролен панел като WHM, ще трябва директно да отворите и редактирате php.ini. Местоположението на php.ini ще варира в зависимост от операционната система на вашия сървър. Много Linux системи поставят файла на пътя “/etc/php.ini”. Можете да потвърдите местоположението му чрез командния ред. Започнете, като влезете в сървъра чрез SSH (свържете се с вашия доставчик на хостинг за инструкции). След като сте свързани, въведете командата “php –ini” и натиснете Enter. Потърсете върнатия ред, озаглавен „Loaded Configuration File“ и вземете под внимание пътя към файла php.ini.

Можете да отворите и редактирате php.ini с помощта на текстов редактор, който работи в командния ред, например „nano“ за Linux. Просто напишете „nano /path/to/php.ini“ и натиснете Enter.
Nano за Linux

php.ini структура

В рамките на php.ini всяка настройка е поставена на свой собствен ред във формата „име на настройка = настройка стойност“. Всеки ред, започващ с точка и запетая, е коментар, така че не актуализирайте никой от тези редове.

Редактиране на настройките за конфигурация

По-долу е даден списък с настройки, които трябва да бъдат прегледани и актуализирани, за да се подобри сигурността. Настройките са групирани в няколко секции по-долу според тяхната цел.

Раздел 1: Отдалечени връзки

разреши_url_fopen = 0
enable_url_include = 0

Не позволявайте опаковките на fopen да отварят отдалечени URL адреси. Отдалеченото съдържание не винаги може да се вярва; деактивирането на тези опции гарантира, че опаковките за фопен могат да зареждат само локално съдържание.

Раздел 2: Настройки на изпълнение

max_input_time = 30
max_execution_time = 30

Ограничете максималния период от време за обработка на входовете, както и максималния период от време, който PHP скриптът може да работи. Тук и двете настройки са зададени на 30 секунди. Това гарантира, че в случай, че скриптът се компрометира, той няма да чете входове или да се изпълнява за продължителен период от време. Добре кодираният скрипт не трябва да изисква повече от 30 секунди за изпълнение.

memory_limit = 8M

Уверете се, че PHP скриптът никога не използва повече от 8MB памет. В случай, че скриптът е компрометиран, тази настройка ефективно ограничава обема памет, който скриптът може да използва.

register_globals = изключен

Деактивирането на тази настройка ефективно забранява автоматично данните да се съхраняват като променлива. Регистрирането на глобални променливи предизвиква няколко притеснения; един пример е, че променливите на средата могат лесно да бъдат модифицирани. За да избегнете тези проблеми, уверете се, че тази настройка е изключена.

expose_php = 0

По подразбиране присъствието на PHP, както и номерът на неговата версия са изложени като част от HTTP отговорите. Тъй като това осигурява ненужна представа за сървъра, препоръчително е да го изключите.

cgi.force_redirect = 1

Уверете се, че PHP може да се стартира само чрез правило за пренасочване на уеб сървър. Това не позволява директно извикване на PHP, което подобрява сигурността.

Раздел 3: Ограничения на входните данни

post_max_size = 256K
max_input_vars = 100

Хакерите могат да се опитат да наводнят ресурси на уеб приложения, като изпращат масови данни към него, което може да намали скоростта на прехвърляне и наличните сървърни ресурси. Ефектът от този тип атака може да се сведе до минимум чрез намаляване на максималния размер на POST данни, а също и чрез ограничаване на количеството данни на заявката. Обърнете внимание, че „post_max_size“ влияе и на максималния размер на качванията на файлове; ако приложението ви има възможности за качване на файлове, уверете се, че стойността на тази настройка е поне толкова голяма, колкото „upload_max_filesize“.

Раздел 4: Работа с грешки

display_errors = 0
display_startup_errors = 0

Съобщенията за грешки никога не трябва да се показват на крайния потребител, тъй като съобщенията често съдържат подробна информация за кода на приложението и сървъра. Тази информация потенциално може да се използва за подпомагане на хакери. Вместо това регистрирайте съобщения за грешка в защитен файл на сървъра.

log_errors = 1
error_log = / home / johndoe / error_log

PHP грешките трябва да се регистрират, за да се отстрани грешката в кода на приложението, както и да се проучат потенциални уязвимости. Ако използвате файлов мениджър, като например този, включен в cPanel, удобното и сигурно място за дневника на грешките е директно извън уеб корен.

Раздел 5: Ограничете достъпа до файлове

open_basedir = "/ Начало / johndoe / public_html"

Open_basedir гарантира, че PHP може да включва файлове от само изброените директории. Това подобрява сигурността, като предпазва PHP скриптите от неволен достъп до защитени файлове извън белите списъци. Обърнете внимание, че трябва да добавите всяка директория, която PHP се нуждае за достъп до списъка с бели списъци, включително временните директории за качване на файлове и сесии (вижте по-долу). Можете да добавите няколко директории към списъка, като поставите двоеточие между всяка директория. Например:

open_basedir = "/ Начало / johndoe / public_html: / Var / ИЪ / PHP / tmp_upload: / Var / ИЪ / PHP / сесия"

Раздел 6: Качвания на файлове

file_uploads = 0

Ако приложението ви не съдържа функционалност за качване на файлове от компютрите на потребителите, препоръчително е да изключите тази функция на PHP напълно. Това помага за предотвратяване на хакерите да качват скриптове, които след това могат да бъдат инжектирани в приложението.

file_uploads = 1
upload_max_filesize = 1М

Ако вашето приложение изисква възможности за качване на файлове, запазете „upload_max_filesize“ до възможно най-малка стойност.

upload_tmp_dir = / var / lib / php / tmp_upload

По подразбиране временните качвания на файлове се поставят в директория, която може да се запише от всички потребители на системата. Местоположението трябва да бъде превключено към по-сигурна директория. Уверете се, че новото местоположение на директория не е разположено в уеб корен. Ако използвате файлов мениджър, като например този, включен в cPanel, тогава лесното и сигурно място за създаване на директорията за качване е директно извън уеб корен (т.е. същата директория, в която се намира public_html). Друго сигурно място е да създадете директорията в директорията PHP в „/ var / lib“. Пътят зависи от операционната система, т.е. “/ var / lib / php” или “/ var / lib / php5”. Ако са в сила ограниченията на open_basedir, уверете се, че директорията за временно качване е включена в белия списък на open_basedir.

Раздел 7: Защита на сесията

Сесиите се използват за запазване на информация в множество заявки за отделни потребители. Действителната информация се съхранява на сървъра и бисквитка (или, по-малко сигурно, HTTP данни за заявка), съдържаща идентификационен номер на сесия, се използва за валидиране на потребителите. Сесиите се използват за цели, включително удостоверяване в уеб приложение, което е една от причините сигурността му да е толкова важна. Следните настройки могат да бъдат актуализирани, за да помогнат за намаляване на риска от прихващане на сесия.

session.use_strict_mode = 1

Създайте нов идентификационен номер на сесия, ако браузърът изпрати предварително неинициализиран идентификационен номер. Това помага да се предотврати атака, наречена фиксиране на сесията.

session.cookie_httponly = 1

Позволете на бисквитката на сесията да бъде достъпна само от HTTP заявка, а не от други източници като JavaScript. Това помага да се предотврати атака, наречена XSS атака.

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

Запишете идентификационния номер на сесията в бисквитка, вместо да я изпращате като URL параметър. Това помага да се защити сесията на потребителя, като се предотвратят атаки за фиксиране на сесията.

session.name = custom_session_id

Бисквитките съхраняват информацията си във формат ключ-стойност. Препоръчително е да актуализирате името на ключа по подразбиране на бисквитката, която съхранява идентификационния номер на сесията. Актуализирайте „custom_session_id“ с персонализирана стойност.

session.cookie_secure = 1

Ако вашето уеб приложение работи над протокола HTTPS за сигурност, разрешете тази настройка да принуди бисквитки, съдържащи идентификатори на сесия, да се осъществява достъп само през защитена връзка.

session.referer_check = example.com

Проверете откъде идва заявката, за да определите дали да разрешите достъп до данни от сесията. Актуализирайте тази стойност на настройката с името на домейна на приложението си, за да предотвратите достъп до информация за сесията, ако скрипт е зареден от външен източник.

session.save_path = "/ Var / ИЪ / PHP / сесия"

Пътят за запазване на файла по подразбиране на сесията се записва от всички потребители на системата. Местоположението трябва да бъде превключено към по-сигурна директория. Уверете се, че новото местоположение на директория не е разположено в уеб корен. Ако използвате файлов мениджър, като например този, включен в cPanel, лесното място за създаване на сесийната директория е директно извън уеб корен (т.е. същата директория, в която се намира public_html). Друго сигурно място е да създадете директорията в директорията PHP в „/ var / lib“. Пътят зависи от операционната система, т.е. “/ var / lib / php” или “/ var / lib / php5”. Ако са в сила ограниченията на open_basedir, уверете се, че пътят за запазване на сесията е включен в белия списък на open_basedir.

session.hash_function = sha512

SHA-512 е по-сигурен алгоритъм за хеширане за създаване на идентификатори на сесия в сравнение с хеш функцията по подразбиране MD5. Този алгоритъм е достъпен във PHP версия 5.3+. Ако използвате по-малка версия на PHP, вместо това използвайте хеш алгоритъм SHA1. За целта задайте „session.hash_function = 1“.

session.bug_compat_42 = 0
session.bug_compat_warn = 0

Деактивирането на тези настройки ще гарантира, че променливите на сесията не могат да бъдат глобално инициализирани, което подобрява сигурността.

Деактивирайте уязвимите функции

disabled_functions = ini_set, php_uname, getmyuid, getmypid, passthru, теч, слушане, diskfreespace, tmpfile, линк, ignore_user_abord, shell_exec, dl, set_time_limit, exec, система, mark_file, източник, show_source, pospathget, pospgetge, posptegtm, posidgex, posptegtm, posidgeg 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_include, pcntl_exec, chgrp, коригират, chown, lchgrp, lchown, putenv

Няколко PHP функции могат да осигурят отворени врати за хакове на уеб приложения, ако не се използват внимателно. Например изпращането на неправилно валидирани входове към много от тези функции води до проблеми със сигурността. Деактивирането на тези функции е просто и ефективно решение на проблема. Ако обаче приложението ви изисква някоя от изброените функции, го премахнете от списъка.

Сапунен кеш

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

Както при качването на файлове и данните от сесията, данните за кеш на SOAP не трябва да се съхраняват във временната директория по подразбиране. Задайте това на по-сигурна директория.

Рестартирайте PHP

След като направите промени във файла php.ini, ще трябва да рестартирате уеб сървъра. WHM предоставя бутон за рестартиране на сървъра след редактиране на файла. Ако не използвате контролен панел като WHM, ще трябва да рестартирате вашия сървър чрез командния ред. За Apache въведете командата “sudo apachectl graceful” и натиснете Enter.

заключение

Чрез актуализиране на тези настройки вашата PHP среда допълнително продължава да бъде защитена от опити за хакване. Осигуряването на вашата PHP среда от хакери е важна стъпка за защита на вашата бизнес репутация. Имайте предвид обаче, че лошо кодираното приложение винаги е отворена врата за хакове, дори и с втвърдена конфигурация на PHP. Започнете, като запазите конфигурацията си втвърдена и от там винаги пишете защитен код на приложение.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me