WordPress için PHP'yi Sertleştirme

Yayınlanan: 2021-06-29

WordPress, PHP üzerinde çalışır ve WordPress sitenizi güçlendirirken dikkat etmeniz gereken temel bir bileşendir. Bu makale, WordPress için PHP güvenliği söz konusu olduğunda ele alabileceğiniz en yaygın, düşük asılı meyvelerden bazılarını ele alacaktır.

Dikkat – PHP ayarlarınızda değişiklik yaparken dikkatli olun. Yanlış ayarlar ve sözdizimi web sitenize zarar verebilir. Üretimde değişiklik yapmadan önce değişikliklerinizi her zaman bir geliştirme veya hazırlama ortamında test edin.

İçindekiler

  • En son PHP sürümünü kullanın
  • PHP sürümünü bastır
  • Herhangi bir phpinfo() dosyasını kaldırın
  • PHP hatalarını ve uyarılarını bastırın
  • Kısıtlama şunları içerir
  • Uzak dosya içeriğini devre dışı bırak
  • Tehlikeli işlevleri devre dışı bırakın veya sınırlayın
  • Hassas dizinlerde PHP yürütmesini engelle
  • Çözüm

En son PHP sürümünü kullanın

İşletim sisteminize, MySQL sunucunuza, web sunucunuza (örn. Nginx, Apache, IIS…) yama uyguladığınızdan emin olmanın yanı sıra, PHP 1'in tam olarak desteklenen bir sürümünü çalıştırdığınızdan emin olmak kesinlikle çok önemlidir. .

PHP İnternet'e açık olduğundan (WordPress, PHP yorumlayıcısının üzerinde çalıştığından), PHP içindeki bir güvenlik açığından yararlanılmasının keşfedilmesi durumunda daha fazla saldırı riski altındadır. Bu ölçüde PHP'yi güncel tutmak (ve dahası, kullanım ömrü sona ermiş 5.x PHP sürümlerinden uzak durmak) yalnızca saldırıların oluşmasını önlemek için değil, aynı zamanda saldırganların aşağıdaki durumlarda saldırıları artırmalarına izin vermek için de çok önemlidir. WordPress web sitenize ayak uydurmayı başarırlar (örneğin, bir WordPress eklentisindeki bir güvenlik açığından yararlanarak).

PHP sürümünü bastır

Çoğu web sunucusu yazılımı gibi, varsayılan olarak PHP, çalıştırdığı sürümü bir X-Powered-By HTTP başlığı aracılığıyla sunar. Bu, diğer durumlarda olduğu gibi kendi başına bir güvenlik açığı olmasa da, yazılım sürümlerini sıralamak genellikle bir saldırının keşif aşamasında saldırganlar için yararlıdır. Bu nedenle, PHP sürümünü devre dışı bırakarak, bir saldırının başarılı olmasını biraz daha zorlaştırmış olursunuz.

Neyse ki, Exposure_php ayarını kullanarak bunu devre dışı bırakmak kolaydır. php.ini yapılandırma dosyanıza aşağıdakini eklemeniz yeterlidir.

expose_php = Off

Herhangi bir phpinfo() dosyasını kaldırın

Hata ayıklama için kullanmak üzere phpinfo() işlevini kullanarak bir PHP dosyası oluşturmak, birçok PHP sistem yöneticisinin sahip olduğu yaygın bir kötü alışkanlıktır. Saldırgan bir 'phpinfo' dosyasıyla (genellikle, şaşırtıcı olmayan bir şekilde phpinfo.php olarak adlandırılır) karşılaşırsa, kendisine yalnızca sunucuda çalışan PHP sürümü hakkında değil, aynı zamanda web sitesinin diğer yönleri hakkında da çok sayıda bilgi ve ayrıntı verilir. web ve veritabanı sunucusu olarak.

phpinfo()'yu gerçekten çalıştırmanız gerekiyorsa, bunu aşağıdaki gibi komut satırından yapmanız çok daha fazla tercih edilir.

php -i

Sisteminizde birden fazla PHP yapılandırması varsa (çok yaygın), hangi php.ini dosyasının kullanılacağını belirtmek için aşağıdaki komutu kullanabilirsiniz.

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

PHP hatalarını ve uyarılarını bastırın

Hatalar, uyarılar ve istisnalar geliştirme sırasında yardımcı olsa da, halka açık bir ortamda görüntüleniyorsa saldırganlar genellikle bu bilgileri sunucu yapılandırması, uygulama düzeni ve bileşenleri hakkında fikir edinmek için kullanır.

Hata mesajları, bilgilerin ifşa edilmesinin en yaygın yollarından bazılarıdır ve genellikle uygulama yükleme yolu ve veritabanı bağlantı ayrıntıları gibi bilgileri sızdırır. Hatalar ve uyarılar göstermek yerine bu bilgilerin günlüğe kaydedildiğinden emin olun. Bu konu hakkında daha fazla bilgi resmi PHP belgelerinde bulunabilir.

Neyse ki, display_errors ayarını kullanarak bunu devre dışı bırakmak kolaydır. php.ini yapılandırma dosyanıza aşağıdakini eklemeniz yeterlidir.

display_errors = Off
log_errors = On

Kısıtlama şunları içerir

Dosya ekleme güvenlik açıkları, bir saldırganın bir PHP include() deyimini kontrol etmesine izin verir. PHP, dahil edilen bir dosyadaki herhangi bir PHP kodunu yürütürken, başka herhangi bir şeyi yazdıracaktır (düz metin olduğu varsayılarak). Bu, bir dosya ekleme güvenlik açığının kontrolünü ele geçiren bir saldırganın, aşağıdakine benzer bir şey çalıştırarak hassas sistem dosyalarına erişmesine izin verebileceği anlamına gelir. Dosya ekleme hakkında daha fazla bilgi için bu makaleye göz atın.

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

php.ini'de open_basedir ayarını yaparak, PHP'ye yalnızca belirli bir dizindeki ve altındaki eklemelere izin vermesini söyleyebilirsiniz. Bu, dosya ekleme güvenlik açıklarını ortadan kaldırmasa da, onları kesinlikle daha kısıtlı hale getirir ve ayrıca kod yürütülmesine yol açabilecek bazı daha gelişmiş saldırıları engeller (bir saldırgan sunucunuzda komut çalıştırabildiğinde).

php.ini dosyanızda open_basedir PHP ayarını aşağıdaki gibi yapabilirsiniz.

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

Uzak dosya içeriğini devre dışı bırak

open_basedir kullanarak yerel içermeleri belirli bir dizine kısıtlamanın yanı sıra, uzak içermeleri devre dışı bırakmanız da önerilir. Uzaktan dosya dahil etme (RFI) saldırıları, yerel dosya dahil etme saldırılarına benzer şekilde çalışır, ancak bir saldırganın sistemdeki dosyalara bağlı olması yerine, uzaktan dosya dahil etme, bir saldırganın ağ üzerinden dosyaları dahil etmesine izin verir. Bu son derece tehlikelidir ve çoğu RFI saldırısı, bir saldırganın web sunucunuzda keyfi olarak kod yürütebilmesiyle sonuçlanır (uzaktan kod yürütme veya RCE olarak adlandırılır).

Uzak dosya içermelerini devre dışı bırakmak için php.ini dosyanızdaki allow_url_fopen ve allow_url_include PHP seçeneklerini aşağıdaki gibi kullanın.

allow_url_fopen = Off
allow_url_include = Off

Tehlikeli işlevleri devre dışı bırakın veya sınırlayın

Bir saldırganın, tüm güvenlik önlemlerinize rağmen, WordPress'inizin PHP güvenliğinde istismar edebilecekleri bir güvenlik açığı bulmayı başarması durumunda, istediğiniz son şey, sunucunuzda rastgele kod çalıştırabilmesidir. . Bir saldırgan sunucunuzda rastgele kod çalıştırabiliyorsa, muhtemelen bir web kabuğu yükleyebilir veya sunucunuzu daha fazla kontrol etmek için bir ters kabuk oluşturabilir ve bunu kötü niyetli tekliflerini yapmak için kullanabilir (kötü amaçlı yazılım yaymak, web sitenizi kimlik avı kampanyaları için kullanmak veya reddetmek gibi). hizmet saldırıları, hatta madencilik kripto para birimi).

Shell_exec() ve system() gibi işlevleri devre dışı bırakarak, kullanıcıların ve saldırganların bu tehlikeli işlevleri kullanmasını önleyebilirsiniz. Bu işlevleri kullanmak için geçerli nedenler olsa da, bunlar çok az sayıdadır ve genellikle aynı sonucu elde etmenin daha güvenli bir yolu vardır.

Uyarı – Çalıştırdığınız bazı yazılımlar/eklentiler (umarım yasal olarak) bu işlevlere bağlı olabileceğinden, bunu üretimde çalıştırmadan önce aşağıdakileri bir test veya hazırlama ortamında kapsamlı bir şekilde test edin.

Aşağıdakiler, php.ini dosyanızdaki disable_functions ayarını kullanarak PHP'de devre dışı bırakmak isteyebileceğiniz, potansiyel olarak tehlikeli işlevlerin bir koleksiyonudur.

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>

Hassas dizinlerde PHP yürütmesini engelle

Varsayılan olarak, web sitenize temalar, eklentiler, resimler, videolar ve diğer dosyaları yüklemek için kullanılan wp-content/uploads dizininizin PHP kodunu yürütmesine izin verilir. Bu biraz risklidir – eğer bir saldırgan bir şekilde bir eklentideki veya bir temadaki dosya yükleme güvenlik açığından yararlanabiliyorsa, bir web kabuğu veya benzer türde bir arka kapı yükleyebilir. wp-content/uploads dizini içinde PHP yürütülmesine izin verileceğinden, bu saldırgan kötü niyetli tekliflerini yapmak için bu PHP kodunu gerçekten çalıştırabilir.

Bunu önlemek aslında oldukça basittir – wp-content/uploads ve dizinde PHP yürütmesini devre dışı bırakın. Naif yol, .htaccess kullanarak bunun gibi *.php dosyalarına erişimi basitçe engellemek olacaktır.

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

Ancak, yukarıdaki konfigürasyonun atlanması nispeten kolaydır – PHP çoğu durumda .phtml .php3 dosyalarını memnuniyetle çalıştıracaktır. En kurşun geçirmez yol, dizin içindeki PHP motorunu tam anlamıyla devre dışı bırakmak olacaktır. Aşağıdaki .htaccess yapılandırması, wp-content/uploads ve wp-includes (saldırganlar tarafından yaygın olarak hedeflenen başka bir dizin) dizinine yerleştirilmelidir.

php_flag engine off

WordPress için PHP güvenliği – son düşünceler

WordPress'in kendisi sağlam ve güvenli bir platform olarak kabul edilmekle birlikte, WordPress kurulumunuzun çalıştığı ortam ve altyapı, web sitenizin bir bütün olarak güvenliğini sağlamak için uzun bir yol kat eder. Bu PHP güvenlik güçlendirme kılavuzunda yer alan konuların uygulanması, size ikinci bir savunma hattı sağlayarak, bir saldırganın WordPress web sitenizdeki bir güvenlik açığını kötüye kullandıktan sonra bir saldırıyı yükseltmesini önemli ölçüde zorlaştıracaktır.

WordPress sitenizi nasıl sağlamlaştıracağınız hakkında daha fazla bilgi edinmek istiyorsanız, WordPress güvenliği ve sağlamlaştırma hakkındaki kesin kılavuzumuzu okuyun.

Bu makalede kullanılan referanslar [ + ]

Bu makalede kullanılan referanslar
1 https://www.php.net/supported-versions.php