• База знаний
  • /
  • Блог
  • /
  • Wiki
  • /
+380 (44) 364 05 71

Linux 24 Рекомендации по безопасности PHP для системных администраторов

Оглавление

 

PHP - это язык сценариев на стороне сервера с открытым исходным кодом, и он широко используется. Веб-сервер Apache / Nginx / Lighttpd обеспечивает доступ к файлам и контенту по протоколу HTTP ИЛИ HTTPS. Неправильно настроенный язык сценариев на стороне сервера может создавать всевозможные проблемы. Таким образом, PHP следует использовать с осторожностью. Вот двадцать четыре лучших практики безопасности php для системных администраторов Linux и Unix для безопасной настройки PHP.

Лучшие практики по безопасности PHP

Наш образец настройки для дальнейшей работы:

DocumentRoot: /var/www/html

Веб-сервер по умолчанию: Apache (вместо Apache можно использовать Lighttpd или Nginx)

Файл конфигурации PHP по умолчанию: /etc/php.ini или /etc/php/7.0/fpm/php.ini

Каталог конфигурации расширений PHP по умолчанию: /etc/php.d/ или /etc/php/7.0/fpm/conf.d/

Наш пример файла конфигурации безопасности php: /etc/php.d/security.ini или /etc/php/7.0/fpm/conf.d/99-security.conf (вам нужно создать этот файл с помощью текстового редактора)

Операционные системы: RHEL/CentOS/Fedora Linux (инструкции должны работать с любыми другими дистрибутивами Linux, такими как Debian/Ubuntu или другими Unix-подобными операционными системами, такими как OpenBSD/FreeBSD/HP-UX).

Порты TCP/UDP по умолчанию сервера PHP: нет

Большинство действий, перечисленных в этом посте, написаны с предположением, что они будут выполняться пользователем root, запускающим bash или любую другую современную оболочку:

$ php -v

Пример результат вывода:

PHP 5.3.3 (cli) (built: Oct 24 2011 08:35:41)
Copyright (c) 1997-2010 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

или

PHP 7.3.7 (cli) (built: Jul  8 2019 09:58:12) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.7, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.7, Copyright (c) 1999-2018, by Zend Technologies

В демонстрационных целях я собираюсь использовать следующую операционную систему:

$ cat /etc/redhat-release

Пример результат вывода:

Red Hat Enterprise Linux Server release 6.1 (Santiago)

1. Знай своего врага

Приложения на основе PHP могут сталкиваться с различными типами атак. Я заметил разные типы атак:

1. XSS – межсайтовый скриптинг - это уязвимость в веб-приложениях php, которую злоумышленники могут использовать для кражи информации пользователей. Вы можете настроить Apache и написать более безопасные сценарии PHP (проверяющие все вводимые пользователем данные), чтобы избежать атак xss.

2. SQL injection – это уязвимость на уровне базы данных приложения php. Если пользовательский ввод неправильно отфильтрован, приложение может выполнять любые операторы SQL. Вы можете настроить Apache и написать безопасный код (проверяющий и избегающий всех вводимых пользователем данных), чтобы избежать атак SQL-инъекций. Обычной практикой в ??PHP является экранирование параметров с помощью функции mysql_real_escape_string ()перед отправкой запроса SQL.
Spoofing.

3. Загрузка файлов - позволяет посетителю размещать файлы (загружать файлы) на ваш сервер. Это может привести к различным проблемам с безопасностью, таким как удаление ваших файлов, удаление базы данных, получение сведений о пользователе и многое другое. Вы можете отключить загрузку файлов с помощью php или написать безопасный код (например, проверить ввод данных пользователем и разрешить только файлы изображений, такие как png или gif)

4. Including локальные и удаленные файлы - Злоумышленник может открывать файлы с удаленного сервера и выполнять любой PHP-код. Это позволяет им загружать файл, удалять файл и устанавливать бэкдоры. Вы можете настроить php для отключения удаленного выполнения файла.

5. eval() - оценивает строку как код PHP. Это часто используется злоумышленниками, чтобы скрыть свой код и инструменты на самом сервере. Вы можете настроить php, чтобы отключить eval().

6. Sea-surf Attack (подделка межсайтовых запросов - CSRF) – эта атака вынуждает конечного пользователя выполнять нежелательные действия в веб-приложении, в котором он / она в настоящее время аутентифицирован. Успешный эксплойт CSRF может поставить под угрозу данные и работу конечного пользователя в случае обычного пользователя. Если целевой конечный пользователь является учетной записью администратора, это может поставить под угрозу все веб-приложение.

2. Найдите встроенные модули PHP

Чтобы увидеть набор встроенных модулей PHP, введите следующую команду:

# php -m

Примеры вывода:

[PHP Modules]
apc
bcmath
bz2
calendar
Core
ctype
curl
date
dom
ereg
exif
fileinfo
filter
ftp
gd
gettext
gmp
hash
iconv
imap
json
libxml
mbstring
memcache
mysqli
openssl
pcntl
pcre
PDO
pdo_mysql
pdo_sqlite
Phar
readline
Reflection
session
shmop
SimpleXML
sockets
SPL
sqlite3
standard
tokenizer
wddx
xml
xmlreader
xmlrpc
xmlwriter
xsl
zip
zlib

Я рекомендую вам использовать PHP с сокращенным количеством модулей для повышения производительности и безопасности. Например, вы можете отключить модуль sqlite3, удалив (удалив) файл конфигурации, или переименовав (переместив) файл с именем /etc/php.d/sqlite3.ini следующим образом:

# rm /etc/php.d/sqlite3.ini

Другие скомпилированные модули можно удалить только путем переустановки PHP с уменьшенной конфигурацией. Вы можете загрузить исходный код php с php.net и скомпилировать его с поддержкой GD, fastcgi и MySQL следующим образом:

# mv /etc/php.d/sqlite3.ini /etc/php.d/sqlite3.disable

 

./configure --with-libdir=lib64 --with-gd --with-mysql --prefix=/usr --exec-prefix=/usr \
--bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share \
--includedir=/usr/include --libexecdir=/usr/libexec --localstatedir=/var \
--sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info \
--cache-file=../config.cache --with-config-file-path=/etc \
--with-config-file-scan-dir=/etc/php.d  --enable-fastcgi \
--enable-force-cgi-redirect

Узнайте, как скомпилировать и переустановить php в Unix, например в операционной системе, для получения дополнительной информации.

3. Ограничьте утечку информации PHP

Чтобы ограничить утечку информации PHP, отключите expose_php. Отредактируйте /etc/php.d/cuity.ini и установите следующую директиву:
expose_php=Off

Когда включено, expose_php вы сообщаете миру, что PHP установлен на сервере, включая версию PHP в заголовке HTTP (например, X-Powered-By: PHP / 7.3.1). Также отображаются идентификаторы логотипа PHP, поэтому добавление их к URL-адресу сайта с поддержкой PHP приведет к отображению соответствующего логотипа. Когда expose_php включен, вы можете увидеть версию php, используя следующую команду:

$ curl -I https://www.example.com/index.php

пример вывода

HTTP/1.1 200 OK
X-Powered-By: PHP/5.3.3
Content-type: text/html; charset=UTF-8
Vary: Accept-Encoding, Cookie
X-Vary-Options: Accept-Encoding;list-contains=gzip,Cookie;string-contains=wikiToken;string-contains=wikiLoggedOut;string-contains=wiki_session
Last-Modified: Thu, 03 Nov 2011 22:32:55 GMT

Я также рекомендую вам настроить директивы ServerTokens и ServerSignature в httpd.conf, чтобы скрыть версию Apache и скрыть версию PHP 5/7 при использовании Nginx.

4. Минимизируйте загружаемые модули PHP (динамические расширения)

PHP поддерживает «Динамические расширения». По умолчанию RHEL загружает все модули расширения, находящиеся в каталоге /etc/php.d/.Чтобы включить или отключить конкретный модуль, просто найдите файл конфигурации в каталоге /etc/php.d/ и закомментируйте имя модуля. Вы также можете переименовать или удалить файл конфигурации модуля. Для лучшей производительности и безопасности PHP вам следует включать только те расширения, которые требуются вашим веб-приложениям. Например, чтобы отключить расширение gd, введите следующие команды:

# cd /etc/php.d/
# mv gd.{ini,disable}
# /sbin/service httpd restart

Чтобы включить модуль php с именем gd, введите:

# mv gd.{disable,ini}
# /sbin/service httpd restart

5. Регистрировать все ошибки PHP

Не показывайте сообщения об ошибках PHP всем посетителям сайта. Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

display_errors=Off

Убедитесь, что вы записываете все ошибки php в файл журнала:

log_errors = On
error_log=/var/log/httpd/php_scripts_error.log

6. Запретить загрузку файлов

Отредактируйте /etc/php.d/security.ini и установите следующую директиву, чтобы отключить загрузку файлов по соображениям безопасности:

file_uploads=Off

Если пользователям вашего приложения необходимо загружать файлы, включите эту функцию, установив параметр upload_max_filesize, ограничивающий максимальный размер файлов, которые PHP будет принимать при загрузке:

file_uploads=On
# user can only upload upto 1MB via php
upload_max_filesize=1M

7. Отключите удаленное выполнение кода

Если включено, allow_url_fopen позволяет файловым функциям PHP, таким как file_get_contents() и операторам include и require, получать данные из удаленных мест, таких как FTP или веб-сайт.

Программисты часто забывают об этом и не выполняют надлежащую фильтрацию ввода при передаче данных, предоставленных пользователем, этим функциям, что делает их уязвимыми для внедрения кода. Большое количество уязвимостей, связанных с внедрением кода, о которых сообщается в веб-приложениях на основе PHP, вызвано сочетанием включения allow_url_fopen и плохой фильтрации ввода. Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

allow_url_fopen=Off

Также рекомендую отключить allow_url_include из соображений безопасности:

allow_url_include=Off

8. Контроль размера POST

Метод запроса HTTP POST используется, когда клиенту (браузеру или пользователю) необходимо отправить данные на веб-сервер Apache как часть запроса, например, при загрузке файла или отправке заполненной формы. Злоумышленники могут попытаться отправить POST-запросы большого размера, чтобы съесть ресурсы вашей системы. Вы можете ограничить максимальный размер POST-запроса, который будет обрабатывать PHP. Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

; Set a realistic value here
post_max_size=1K

1K устанавливает максимальный размер данных публикации, разрешенный приложениям php. Этот параметр также влияет на загрузку файлов. Для загрузки больших файлов это значение должно быть больше, чем upload_max_filesize. Я также предлагаю вам ограничить доступные методы с помощью веб-сервера Apache. Отредактируйте httpd.conf и установите следующую директиву для DocumentRoot /var/www/html:

<directory /var/www/html>
    <limitExcept GET POST>
        Order allow,deny
    </limitExcept>
## Add rest of the config goes here... ##
</directory>

9. Контроль ресурсов (DoS Control)

Вы можете установить максимальное время выполнения каждого скрипта php в секундах. Другой рекомендуемый вариант - установить максимальное количество времени, в течение которого каждый сценарий может тратить на анализ данных запроса, и максимальный объем памяти, который может потреблять сценарий. Отредактируйте /etc/php.d/security.ini и установите следующие директивы:

# set in seconds
max_execution_time =  30
max_input_time = 30
memory_limit = 40M

10. Отключение опасных функций PHP

PHP имеет множество функций, которые можно использовать для взлома вашего сервера, если они используются неправильно. Вы можете установить список функций в /etc/php.d/security.ini с помощью директивы disable_functions:

disable_functions=exec,passthru,shell_exec,system,proc_open,
popen,curl_exec,curl_multi_exec,parse_ini_file,show_source

11. Директива PHP Fastcgi / CGI – cgi.force_redirect

PHP работает с FastCGI. Fascgi сокращает объем памяти, занимаемый вашим веб-сервером, но по-прежнему дает вам скорость и мощность всего языка PHP. Вы можете настроить Apache2 + PHP + FastCGI или cgi, как описано здесь. Директива конфигурации cgi.force_redirect запрещает кому-либо вызывать PHP напрямую с URL-адресом, например https://www.example.com/cgi-bin/php/hackerdir/backdoor.php. Включите cgi.force_redirect из соображений безопасности. Отредактируйте /etc/php.d/security.ini и установите следующую директиву:

; Enable cgi.force_redirect for security reasons in a typical *Apache+PHP-CGI/FastCGI* setup
cgi.force_redirect=On

12. Пользователь PHP и идентификатор группы

mod_fastcgi - это cgi-модуль для веб-сервера Apache. Он может подключаться к внешнему серверу FASTCGI. Вам необходимо убедиться, что php запускается как пользователь без полномочий root. Если PHP выполняется как root или UID ниже 100, он может обращаться к системным файлам и / или манипулировать ими. Вы должны выполнять PHP CGI от имени непривилегированного пользователя, используя suEXEC или mod_suPHP Apache. Функция suEXEC предоставляет пользователям Apache возможность запускать программы CGI под идентификаторами пользователя, отличными от идентификатора пользователя вызывающего веб-сервера. В этом примере мой php-cgi работает как пользователь phpcgi, а apache работает как пользователь apache:

# ps aux | grep php-cgi

Вы можете использовать такой инструмент, как spawn-fcgi, для создания удаленных и локальных процессов FastCGI в качестве пользователя phpcgi (сначала добавьте пользователя phpcgi в систему):

# spawn-fcgi -a 127.0.0.1 -p 9000 -u phpcgi -g phpcgi -f /usr/bin/php-cgi

теперь вы можете настроить веб-сервер Apache, Lighttpd и Nginx для использования внешнего php FastCGI, работающего на порт 9000 с IP-адресом 127.0.0.1.

13. Ограничьте доступ PHP к файловой системе

Директива open_basedir устанавливает каталоги, из которых PHP разрешен доступ к файлам, используя такие функции, как fopen() и другие. Если файл находится за пределами путей, определенных open_basdir, PHP откажется его открыть. Вы не можете использовать символическую ссылку в качестве временного решения. Например, разрешить доступ только к каталогу /var/www/html, но не к каталогам /var/www, /tmp или /etc:

; Limits the PHP process from accessing files outside
; of specifically designated directories such as /var/www/html/
open_basedir="/var/www/html/"
; ------------------------------------
; Multiple dirs example
; open_basedir="/home/httpd/vhost/example.com/html/:/home/httpd/vhost/nixcraft.com/html/:/home/httpd/vhost/theos.in/html/"
; ------------------------------------

14. Путь сессий

Поддержка сессий в PHP заключается в способе сохранения определенных данных при последующих доступах. Это позволяет вам создавать более индивидуальные приложения и повышать привлекательность вашего веб-сайта. Этот путь определен в файле /etc/php.ini, и все данные, относящиеся к конкретному сеансу, будут храниться в файле в каталоге, указанном параметром session.save_path. По умолчанию в RHEL/CentOS/Fedora Linux установлено следующее:

session.save_path="/var/lib/php/session"
; Set the temporary directory used for storing files when doing file upload
upload_tmp_dir="/var/lib/php/session"

Убедитесь, что путь находится за пределами /var/www/html и не доступен для чтения или записи другими пользователями системы:

# ls -Z /var/lib/php/
drwxrwx---. root apache system_u:object_r:httpd_var_run_t:s0 session

Примечание. Параметр -Z команды ls отображает контекст безопасности SELinux, такой как режим файла, пользователь, группа, контекст безопасности и имя файла.

15. Своевременно обновляйте PHP, программное обеспечение и ОС

Применение исправлений безопасности - важная часть поддержки серверов Linux, Apache, PHP и MySQL. Все обновления безопасности php должны быть проверены и применены как можно скорее с помощью любого из следующих инструментов (если вы устанавливаете PHP через диспетчер пакетов): или Вы можете настроить Red Hat/CentOS/Fedora Linux для отправки уведомления об обновлении пакета yum по электронной почте. Другой вариант - применить все обновления безопасности через задание cron. В Debian/UbuntuLinux вы можете использовать apticron для отправки уведомлений безопасности.

# yum update

или

# apt-get update && apt-get upgrade

16. Ограничение доступа к файлам и каталогам

Убедитесь, что вы запускаете Apache как пользователь без полномочий root, например Apache или www. Все файлы и каталог должны принадлежать пользователю без полномочий root (или пользователю apache) в /var/www/html: /var/www/html/ - это подкаталог, а DocumentRoot может быть изменен другими пользователями, поскольку root никогда не выполняет никаких файлов там.

# chown -R apache:apache /var/www/html/

Убедитесь, что права доступа к файлам установлены на 0444 (только для чтения) в /var/www/html/:

# chmod -R 0444 /var/www/html/

Убедитесь, что все права доступа к каталогам установлены на 0445 в /var/www/html/:

# find /var/www/html/ -type d -print0 | xargs -0 -I {} chmod 0445 {}

Примечание о настройке правильных разрешений для файлов

Команды chown и chmod гарантируют, что ни при каких обстоятельствах DocumentRoot или файлы, содержащиеся в DocumentRoot, не будут доступны для записи пользователю веб-сервера apache. Обратите внимание, что вам нужно установить разрешения, которые наиболее подходят для модели разработки вашего веб-сайта, поэтому не стесняйтесь настраивать команды chown и chmod в соответствии с вашими требованиями. В этом примере сервер Apache запущен как пользователь apache. Это настраивается с помощью директив User и Group в вашем файле httpd.conf. Пользователь apache должен иметь доступ для чтения ко всему, что находится под DocumentRoot, но не должен иметь доступа для записи ни к чему.
Убедитесь, что httpd.conf имеет следующие директивы для ограничительной конфигурации:

<directory>
    Options None
    AllowOverride None
    Order allow,deny
</directory>

 Вы должны предоставлять доступ на запись только при необходимости. Некоторым веб-приложениям, таким как wordpress и другим, может потребоваться каталог кеширования. Вы можете предоставить доступ на запись в каталог кеширования, используя следующие команды:

# chmod a+w /var/www/html/blog/wp-content/cache
### block access to all ###
# echo 'deny from all' > /var/www/html/blog/wp-content/cache/.htaccess

17. Защита от записи файлов конфигурации Apache, PHP и MySQL.

Используйте команду chattr для записи файлов конфигурации защиты:

# chattr +i /etc/php.ini
# chattr +i /etc/php.d/*
# chattr +i /etc/my.ini
# chattr +i /etc/httpd/conf/httpd.conf
# chattr +i /etc/

Команда chattr также может защитить ваш php файл или файлы в каталоге /var/www/html:

# chattr +i /var/www/html/file1.php
# chattr +i /var/www/html/

18. Используйте расширения безопасности Linux (например, SELinux).

Linux поставляется с различными патчами безопасности, которые можно использовать для защиты от неправильно настроенных или скомпрометированных серверных программ. Если возможно, используйте SELinux и другие расширения безопасности Linux, чтобы наложить ограничения на сеть и другие программы. Например, SELinux предоставляет множество политик безопасности для ядра Linux и веб-сервера Apache. Чтобы вывести список всех переменных защиты Apache SELinux, введите:

# getsebool -a | grep httpd

Пример:

allow_httpd_sys_script_anon_write --> off
httpd_builtin_scripting --> on
httpd_can_check_spam --> off
httpd_can_network_connect --> off
httpd_can_network_connect_cobbler --> off
httpd_can_network_connect_db --> off
httpd_can_network_memcache --> off
httpd_can_network_relay --> off
httpd_can_sendmail --> off
httpd_dbus_avahi --> on
httpd_enable_cgi --> on
httpd_enable_ftp_server --> off
httpd_enable_homedirs --> off
httpd_execmem --> off
httpd_read_user_content --> off
httpd_setrlimit --> off
httpd_ssi_exec --> off
httpd_tmp_exec --> off
httpd_tty_comm --> on
httpd_unified --> on
httpd_use_cifs --> off
httpd_use_gpg --> off
httpd_use_nfs --> off

Чтобы отключить поддержку Apache cgi, введите:

# setsebool -P httpd_enable_cgi off

19. Установите Mod_security

ModSecurity - это механизм обнаружения и предотвращения вторжений с открытым исходным кодом для веб-приложений. Вы можете легко установить mod_security под Linux и защитить приложения на основе apache и php от xss и различных других атак:

## Examples ##
# Do not allow to open files in /etc/
SecFilter /etc/

# Stop SQL injection
SecFilter "delete[[:space:]]+from"
SecFilter "select.+from"

20. Если возможно, запустите Apache / PHP в Chroot Jail

Помещение PHP и / или Apache в chroot jail сводит к минимуму ущерб, наносимый потенциальным взломом, за счет изоляции веб-сервера от небольшого раздела файловой системы. Вы можете использовать традиционный способ настройки chroot с Apache. Тем не менее, я рекомендую FreeBSD Jail, XEN виртуализацию, KVM виртуализацию или OpenVZ виртуализацию или Docker которые используют концепцию контейнеров.

21. Используйте брандмауэр для ограничения исходящих подключений

Злоумышленник загрузит файл локально на ваш веб-сервер с помощью таких инструментов, как wget. Используйте iptables, чтобы заблокировать исходящие соединения от пользователя apache. Модуль ipt_owner пытается сопоставить различные характеристики создателя пакетов для локально сгенерированных пакетов. Он действителен только в цепочке OUTPUT. В этом примере разрешите пользователю user подключаться снаружи через порт 80 (полезно для доступа к репо RHN или centos)

/sbin/iptables -A OUTPUT -o eth0 -m owner --uid-owner user -p tcp --dport 80 -m state --state NEW,ESTABLISHED  -j ACCEPT

Вот еще один пример, который блокирует все исходящие подключения от пользователя apache, кроме нашего собственного smtp-сервера и службы API проверки спама

# ....
/sbin/iptables --new-chain apache_user
/sbin/iptables --append OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
/sbin/iptables --append OUTPUT -m owner --uid-owner apache -j apache_user
# allow apache user to connec to our smtp server
/sbin/iptables --append apache_user -p tcp --syn -d 192.168.1.100 --dport 25 -j RETURN
# Allow apache user to connec to api server for spam validation
/sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.62 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  66.135.58.61 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.89 --dport 80 -j RETURN
/sbin/iptables --append apache_user -p tcp --syn -d  72.233.69.88 --dport 80 -j RETURN
#########################
## Add more rules here ##
#########################
# No editing below
# Drop everything for apache outgoing connection
/sbin/iptables --append apache_user -j REJECT

Узнайте, как настроить брандмауэр UFW на сервере Ubuntu 20 для получения дополнительной информации.

22. Следите за своими журналами и аудитом

Проверьте файл журнала apache. Используйте команду grep /egrep:

# tail -f /var/log/httpd/error_log
# grep 'login.php' /var/log/httpd/error_log
# egrep -i "denied|error|warn" /var/log/httpd/error_log

проверьте файл журнала php:

# tail -f /var/log/httpd/php_scripts_error.log
# grep "...etc/passwd" /var/log/httpd/php_scripts_error.log

Просмотр файлов журнала - хорошая практика безопасности php. Файлы журналов дадут вам некоторое представление о том, какие атаки совершаются на сервер, и позволят вам проверить, присутствует ли необходимый уровень безопасности или нет. Услуга auditd предназначена для системного аудита. Включите его, чтобы контролировать события SELinux, события аутентификации, модификации файлов, модификации учетной записи и т. д. Я также рекомендую использовать стандартные «Инструменты мониторинга системы Linux» для мониторинга вашего веб-сервера.

23. Запуск службы для каждой системы или экземпляра виртуальной машины.

Для больших проектов рекомендуется запускать базу данных, статический и динамический контент с разных серверов.

Запускайте разные сетевые службы на отдельных серверах или экземплярах виртуальных машин. Это ограничивает количество других сервисов, которые могут быть скомпрометированы. Например, если злоумышленник сможет успешно использовать программное обеспечение, такое как поток Apache, он /она получит доступ ко всему серверу, включая другие службы, работающие на том же сервере (например, MySQL, сервер электронной почты и т. д.). Но в приведенном выше примере контент обслуживается следующим образом

static.lan.example.com - используйте сервер lighttpd или nginx для статических ресурсов, таких как js/css/images.

  1. phpcgi1.lan.example.com и phpcgi2.lan.example.com - веб-сервер Apache с php, используемый для генерации динамического контента.

  2. mysql1.lan.example.com - сервер базы данных MySQL.

  3. mcache1.lan.example.com - Сервер Memcached - это очень быстрая система кеширования для MySQL. Он использует libevent или epoll (среда выполнения Linux) для масштабирования до любого количества открытых подключений и использует неблокирующий сетевой ввод-вывод.

  4. LB01 - веб-сервер nginx и обратный прокси-сервер перед веб-серверами Apache. Все соединения, поступающие из Интернета и адресованные одному из веб-серверов, маршрутизируются через прокси-сервер nginx, который может либо обрабатывать сам запрос, либо передавать его полностью или частично на основные веб-серверы. LB01 обеспечивает простую балансировку нагрузки.

24. Дополнительные инструменты

Со страницы проекта:

PHPIDS (PHP-система обнаружения вторжений) - это простой в использовании, хорошо структурированный, быстрый и современный уровень безопасности для вашего веб-приложения на основе PHP. IDS не удаляет, не дезинфицирует и не фильтрует вредоносный ввод, она просто распознает, когда злоумышленник пытается взломать ваш сайт, и реагирует именно так, как вы этого хотите.

Вы можете использовать PHPIDS для обнаружения злоумышленников и регистрации любых обнаруженных атак для последующего просмотра. Обратите внимание, что я лично не использовал этот инструмент.

Со страницы проекта:

PhpSecInfo предоставляет эквивалент функции phpinfo(), которая сообщает информацию о безопасности среды PHP и предлагает предложения по улучшению. Это не замена безопасным методам разработки и не выполняет какой-либо аудит кода или приложений, но может быть полезным инструментом в многоуровневом подходе к безопасности.

Используйте статические анализаторы кода такие как Psalm или PHPStan. С их помощь, можно найти множество проблем в своем коде,

Со страницы проекта:

Псалом помогает людям поддерживать самые разные кодовые базы - большие и маленькие, древние и современные. При самой строгой настройке он может помочь вам предотвратить почти все ошибки времени выполнения, связанные с типом, и позволяет вам воспользоваться безопасными шаблонами кодирования, популярными на других языках.

Psalm также может автоматически исправлять ошибки, позволяя вам улучшить свой код, не беспокоясь о нем.

Примечание о бэкдорах PHP

Вы можете встретить скрипты php или так называемые общие бэкдоры, такие как c99, c99madshell, r57 и так далее. Скрипт backdoor php - это не что иное, как скрытый скрипт для обхода всей аутентификации и доступа к вашему серверу по запросу. Он устанавливается злоумышленниками для доступа к вашему серверу, пытаясь остаться незамеченным. Обычно сценарий PHP (или любого другого сценария CGI) по ошибке позволяет включить код, использующий уязвимости в веб-браузере. Злоумышленник может использовать такие уязвимости для загрузки оболочек бэкдора, которые могут дать ему или ей ряд возможностей, таких как:

Скачать файлы

Загрузить файлы

Установить руткиты

Установите почтовые серверы для спама / сервер ретрансляции

Установите прокси-сервер, чтобы скрыть треки

Возьмите под свой контроль сервер

Возьмите под свой контроль сервер базы данных

Украсть всю информацию

Удалить всю информацию и базу данных

Открытые порты TCP / UDP и многое другое

Совет: как искать бэкдоры PHP?

Используйте команду grep в Unix / Linux для поиска оболочки c99 или r57:

# grep -iR 'c99' /var/www/html/
# grep -iR 'r57' /var/www/html/
# find /var/www/html/ -name \*.php -type f -print0 | xargs -0 grep c99
# grep -RPn "(passthru|shell_exec|system|base64_decode|fopen|fclose|eval)" /var/www/html/

Заключение

Ваш сервер на базе PHP теперь должным образом усилен и готов к отображению динамических веб-страниц. Однако уязвимости в основном вызваны несоблюдением передовых правил программирования и недостаточным тестированием приложений.

Надеюсь наш список основных советов по безопасности PHP, которые может применять системный администратор Linux будет полезен для Вас.

Кстати на нашем виртуальном UNIX хостинге используется WAF файрвол для защиты сайтов, есть возможность управления модулями PHP, можно настроить дополнительную защиту административной части сайта, получать ежедневные отчеты про измененные файлы, управлять правами доступа к файлам (через ssh, FTP клиент, WEB-интерфейс), настраивать опции PHP и многое другое.

Есть какие-нибудь другие рекомендации по безопасности PHP?

Дайте нам знать в комментариях ниже.

Дата: 02.02.2021
Автор: Евгений
Голосование

Авторам статьи важно Ваше мнение. Будем рады его обсудить с Вами:

comments powered by Disqus
Спасибо, что выбираете FREEhost.UA