Wzmacnianie PHP dla WordPress

Opublikowany: 2021-06-29

WordPress działa na PHP i jest podstawowym komponentem, na który należy zwrócić uwagę podczas wzmacniania witryny WordPress. W tym artykule omówimy niektóre z najczęstszych, nisko wiszących owoców, którymi możesz się zająć, jeśli chodzi o bezpieczeństwo PHP dla WordPressa.

Uwaga – zachowaj ostrożność podczas wprowadzania zmian w ustawieniach PHP. Nieprawidłowe ustawienia i składnia mogą uszkodzić Twoją witrynę. Zawsze testuj zmiany w środowisku programistycznym lub przejściowym przed wprowadzeniem zmian w środowisku produkcyjnym.

Spis treści

  • Użyj najnowszej wersji PHP
  • Pomiń wersję PHP
  • Usuń wszystkie pliki phpinfo()
  • Pomiń błędy i ostrzeżenia PHP
  • Ogranicz zawiera
  • Wyłącz plik zdalny zawiera
  • Wyłącz lub ogranicz niebezpieczne funkcje
  • Blokuj wykonywanie PHP w wrażliwych katalogach
  • Wniosek

Użyj najnowszej wersji PHP

Oprócz upewnienia się, że łatasz swój system operacyjny, serwer MySQL, serwer WWW (np. Nginx, Apache, IIS…) jest również absolutnie kluczowe, aby upewnić się, że korzystasz z w pełni obsługiwanej wersji PHP 1 .

Ponieważ PHP jest narażony na działanie Internetu (ponieważ WordPress działa na interpreterze PHP), istnieje większe ryzyko ataku w przypadku wykrycia exploita wykorzystującego lukę w PHP. W takim stopniu, utrzymywanie aktualności PHP (a tym bardziej, aby trzymać się z daleka od wycofanych z eksploatacji wersji PHP 5.x) jest kluczowe nie tylko w celu zapobiegania atakom, ale także w celu umożliwienia atakującym eskalacji ataków, jeśli udaje im się zdobyć przyczółek na Twojej witrynie WordPress (np. wykorzystując lukę we wtyczce WordPress).

Pomiń wersję PHP

Jak większość oprogramowania serwera WWW, PHP domyślnie ujawnia uruchomioną wersję za pomocą nagłówka HTTP X-Powered-By. Chociaż samo w sobie nie jest to luka w zabezpieczeniach, jak w każdej innej sytuacji, wyliczanie wersji oprogramowania jest ogólnie przydatne dla atakujących w fazie rozpoznania ataku. Dlatego wyłączając wersję PHP, możesz sprawić, że atak będzie odrobinę utrudniony.

Na szczęście można to łatwo wyłączyć za pomocą ustawienia expos_php. W pliku konfiguracyjnym php.ini po prostu dodaj następujące elementy.

expose_php = Off

Usuń wszystkie pliki phpinfo()

Tworzenie pliku PHP przy użyciu funkcji phpinfo() do debugowania jest powszechnym złym nawykiem wielu administratorów systemów PHP. Jeśli atakujący natknie się na plik „phpinfo” (zazwyczaj nazwany phpinfo.php), otrzymuje mnóstwo informacji i szczegółów nie tylko o wersji PHP działającej na serwerze, ale także o innych aspektach witryny, takich jak jako serwer WWW i baz danych.

Jeśli naprawdę potrzebujesz uruchomić phpinfo(), znacznie lepiej jest zrobić to z wiersza poleceń, w następujący sposób.

php -i

Jeśli masz więcej niż jedną konfigurację PHP w swoim systemie (bardzo często), możesz użyć następującego polecenia, aby określić, którego pliku php.ini użyć.

php -c /etc/php/apache2/php.ini -i

Pomiń błędy i ostrzeżenia PHP

Chociaż błędy, ostrzeżenia i wyjątki są przydatne podczas opracowywania, jeśli są wyświetlane w środowisku publicznym, osoby atakujące często wykorzystują te informacje w celu uzyskania wglądu w konfigurację serwera, układ aplikacji i składniki.

Komunikaty o błędach to jedne z najczęstszych ścieżek ujawniania informacji, często ujawniające informacje, takie jak ścieżka instalacji aplikacji i szczegóły połączenia z bazą danych. Zamiast pokazywać błędy i ostrzeżenia, upewnij się, że te informacje są rejestrowane. Więcej informacji na ten temat można znaleźć w oficjalnej dokumentacji PHP.

Na szczęście można to łatwo wyłączyć za pomocą ustawienia display_errors. W pliku konfiguracyjnym php.ini po prostu dodaj następujące elementy.

display_errors = Off
log_errors = On

Ogranicz zawiera

Luki w zabezpieczeniach plików umożliwiają atakującemu kontrolowanie instrukcji include() w PHP. Podczas gdy PHP wykona dowolny kod PHP w pliku, który zostanie dołączony, wydrukuje wszystko inne (zakładając, że jest to zwykły tekst). Oznacza to, że atakujący przejmujący kontrolę nad luką w zabezpieczeniach plików może uruchomić coś podobnego do poniższego, dając mu dostęp do poufnych plików systemowych. Aby dowiedzieć się więcej o dołączaniu plików, zajrzyj do tego artykułu.

include "../../../../etc/passwd"

Ustawiając ustawienie open_basedir w php.ini, możesz poinstruować PHP, aby zezwalał na dołączanie tylko w określonym katalogu i poniżej. Chociaż nie eliminuje to luk w zabezpieczeniach dołączania plików, z pewnością czyni je bardziej ograniczonymi, a także prowadzi do bardziej zaawansowanych ataków, które mogą prowadzić do wykonania kodu (gdy atakujący może wykonać polecenia na twoim serwerze).

Możesz ustawić ustawienie open_basedir PHP w pliku php.ini w następujący sposób.

open_basedir = /var/www/html/example.com

Wyłącz plik zdalny zawiera

Oprócz ograniczania dołączania lokalnego do określonego katalogu za pomocą open_basedir, zaleca się również wyłączenie dołączania zdalnego. Ataki na zdalne dołączanie plików (RFI) działają podobnie do ataków na lokalne dołączanie plików, ale zamiast powiązania atakującego z plikami w systemie, zdalne dołączanie plików umożliwia atakującemu dołączanie plików przez sieć. Jest to niezwykle niebezpieczne, a większość ataków RFI kończy się tym, że atakujący może arbitralnie wykonać kod na twoim serwerze sieciowym (nazywane zdalnym wykonaniem kodu lub RCE).

Aby wyłączyć zdalne dołączanie plików, użyj opcji PHP allow_url_fopen i allow_url_include w pliku php.ini w następujący sposób.

allow_url_fopen = Off
allow_url_include = Off

Wyłącz lub ogranicz niebezpieczne funkcje

W przypadku, gdy atakującemu, pomimo wszystkich stosowanych przez Ciebie środków bezpieczeństwa, uda się znaleźć lukę w zabezpieczeniach PHP Twojego WordPressa, którą może wykorzystać, ostatnią rzeczą, jakiej chcesz, jest możliwość uruchomienia dowolnego kodu na Twoim serwerze . Jeśli atakujący jest w stanie uruchomić dowolny kod na twoim serwerze, prawdopodobnie może zainstalować powłokę internetową lub ustanowić odwrotną powłokę, aby dalej kontrolować serwer i używać go do wykonywania swoich nikczemnych licytacji (takich jak rozpowszechnianie złośliwego oprogramowania, używanie Twojej witryny do kampanii phishingowych lub odmowy ataków usługowych, a nawet kopania kryptowaluty).

Wyłączając funkcje, takie jak shell_exec() i system(), możesz uniemożliwić użytkownikom i atakującym korzystanie z tych niebezpiecznych funkcji. Chociaż mogą istnieć uzasadnione powody, aby korzystać z tych funkcji, są one bardzo nieliczne i odmienne, a zazwyczaj istnieje bezpieczniejszy sposób na osiągnięcie tego samego rezultatu.

Uwaga — przed uruchomieniem w środowisku produkcyjnym dokładnie przetestuj poniższe elementy w środowisku testowym lub pomostowym, ponieważ niektóre używane oprogramowanie/wtyczki mogą (miejmy nadzieję, że jest to uzasadnione) zależeć od tych funkcji.

Poniżej znajduje się zbiór potencjalnie niebezpiecznych funkcji, które możesz chcieć wyłączyć w PHP za pomocą ustawienia disable_functions w pliku php.ini.

disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace,
tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source,
show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, 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</em>

Blokuj wykonywanie PHP w wrażliwych katalogach

Domyślnie twój katalog wp-content/uploads , który służy do przesyłania motywów, wtyczek, obrazów, filmów i innych plików na twoją stronę, może wykonywać kod PHP. Jest to dość ryzykowne – jeśli atakujący w jakiś sposób jest w stanie wykorzystać lukę w przesyłaniu plików we wtyczce lub motywie, może być w stanie przesłać webshell lub podobny rodzaj backdoora. Ponieważ wykonanie PHP byłoby dozwolone w katalogu wp-content/uploads , osoba atakująca może być w stanie faktycznie wykonać ten kod PHP, aby wykonać swoje złośliwe licytacje.

Zapobieganie temu jest w rzeczywistości dość proste – wyłącz wykonywanie PHP w wp-content/uploads i katalogu. Naiwnym sposobem byłoby po prostu zablokowanie dostępu do takich plików *.php przy użyciu .htaccess .

<Files *.php>
deny from all
</Files>

Jednak powyższą konfigurację można stosunkowo łatwo ominąć – PHP w większości przypadków z przyjemnością wykona pliki .phtml .php3. Najbardziej kuloodpornym sposobem byłoby dosłownie wyłączenie silnika PHP w katalogu. Następująca konfiguracja .htaccess powinna zostać umieszczona w katalogu wp-content/uploads i wp-includes (kolejny katalog często atakowany przez atakujących).

php_flag engine off

Bezpieczeństwo PHP dla WordPressa – uwagi końcowe

Chociaż sam WordPress należy uznać za solidną i bezpieczną platformę, środowisko i infrastruktura, na której działa instalacja WordPressa, zapewniają bezpieczeństwo całej witryny. Wdrożenie tematów opisanych w tym przewodniku dotyczącym wzmacniania zabezpieczeń PHP zapewni drugą linię obrony, znacznie utrudniając atakującemu eskalację ataku po wykorzystaniu luki w zabezpieczeniach witryny WordPress.

Jeśli chcesz dowiedzieć się więcej o tym, jak wzmocnić swoją witrynę WordPress, przeczytaj nasz ostateczny przewodnik na temat bezpieczeństwa i wzmacniania WordPress.

Referencje użyte w tym artykule [ + ]

Referencje użyte w tym artykule
1 https://www.php.net/supported-versions.php