PHP açık kaynak kodlu bir server side kodlama dilidir ve dünya üzerinde yaygın olarak kullanılmaktadır. Apache/Nginx/Litespeed/Lighttpd/IIS gibi bilinen web servisleri desteklemektedir. Yanlış yapılandırılmış bir sunucu veya kod her türlü soruna neden olabilir. Bu nedenle de dikkatli kullanılması gerekir. Basit PHP güvenlik önlemleri yazısında güvenlikle ilgili bazı detayları, neler yapmanız gerektiğini bulabilirsiniz.
Bizim yapacağımız işlemler manuel kurulmuş PHP ve web servisi olarak Apache ile Freebsd işletim sistemi üzerindedir. Fakat diğer Linux dağıtımlarında veya Linux/Unix dağıtımları üzerinde bir web hosting kontrol panelini kullanıyor olsanız da benzer şekilde olacaktır.
Kullandığımız Php sürümü PHP 7.2.19 şeklindedir. Php sürümünüzü kontrol etmek için, ssh üzerinde yazın;
php -v
PHP 7.2.19 (cli) (built: Jul 4 2019 14:01:58) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with the ionCube PHP Loader v10.3.1, Copyright (c) 2002-2018, by ionCube Ltd.
with Zend OPcache v7.2.19, Copyright (c) 1999-2018, by Zend Technologies
Herhangi bir muharebe veya mücadele veriyorsanız önce ilk bilmemiz gereken düşmanımızı tanımak olacaktır. PHP üzerindeki bilmeniz gereken düşmanlar;
Öncelikle sistemimize hakim olmamız gerekiyor. Php yükledikten sonra ihtiyacımız olan bileşenleri (extensions) de yüklüyoruz. Peki kurduğumuz her bileşene ihtiyacımız var mı? Sistemimizdeki php bileşenlerini kontrol edelim;
php -m
Bu listede kullanmadığımız bileşen var ise ve hiç kullanmayacaksak kaldıralım. Freebsd üzerinde bileşenler /usr/local/etc/php dizininde tutuluyor. Linux dağıtımlarında /etc/php.d/ dizininde. Kullanmadığınız bir bileşen var ise silebilir veya ismini değiştirmeniz bile kafi gelir.
mv ext-30-imap.ini ext-30-imap.ini.iptal
veya
rm -rf ext-30-imap.ini
Bileşenlerinizi kontrol edin, kullanmadığınız bileşen var ise kaldırın.
Saldırganlar size saldırmadan önce sunucunuz ve web siteniz hakkında ne kadar az bilgiye sahip olurlarsa o kadar güvenli olacaktır. Hangi php versiyonunu kullandığınızı bilmesinler. Bu işlem gayet basit php.ini dosyanızı açın ve alttaki değeri “off” yapın.
expose=off
Daha fazla bilgi için bu yazımızı da görüntüleyebilirsiniz.
Olası bir php hatasını ziyaretçilere kapatın. Ziyatetçiler PHP hatalarını görmeyi hem sevmez, hem de kötü niyetli bir kişi php hatasında, web sitenizin yolunu (path) ve daha fazla bilgiyi öğrenebilir. Kapatmak için php.ini dosyanız üzerinde aşağıdaki değeri off yapın.
display_errors = off
Dosya yükleme (file_uploads) kullanıyor musunuz? Kullanmıyorsanız kapatın. Kullanıyorsanız da limiti gerektiği kadar ayarlayın. Kapatmak için php.ini dosyasındaki değeri off yapın.
file_uploads = off
Kullanıyorsanız yine php.ini dosyasında değeri minimuma indirin;
upload_max_filesize = 1M
PHP kodu düzgün yazılmadığında, kötü niyetli bir kişi sunucunuzda istediği gibi yetkiye sahip olur. Güvenlik önlemi olarak da bu fonksiyonları kapatın. php.ini dosyanızda “disable functions” bölümünü bulun ve aşağıdaki fonksiyonları kapatın;
disable_functions =exec,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,passthru,mail
Mail fonksiyonunu da kapatın ve mail gönderim işleminizi smtp kimlik doğrulama ile halledin.
Open_basedir yönergesi, PHP’nin fopen gibi fonksiyonları kullanarak dosyalara erişmesine izin verilen dizinleri belirler. Eğer dosya open_basedir değerinin dışındaysa php bu işlemi reddeder. Open_basedir dizinini ayarlayın. php.ini dosyasında sadece kullanıcının erişmesi gereken yeri yazın. Yüksek ihtimalle bir /tmp dizinine bağlamanız yeterli olacaktır.
open_basedir="/var/www/html/tmp"
PHP majör değişikliklerini tam sürüm güncellemesinde yapar. Yani PHP 5’den 7’ye geçerken dikkatli olun ama sürümler arası güncellemeyi sürekli yapın.
Web sitenizi root kullanıcı ile çalıştırmayın. Bir veya bir kaç web siteniz var ise www kullanıcısı ile, daha fazla var ise her web sitesine ayrı bir kullanıcı oluşturun. Dosya ve dizin sahipliklerini “chown” komutu ile belirleyin.
Web siteniz statik bir site ise yazma koruma kullanın. chattr komutu bunun için var. Misal wp-config.php dosyanızı bir kere yapılandırıp bir daha bakmazsınız, bu sebeple değişiklik yapılmasın diye dosyayı chattr komutu ile kilitleyin. Daha fazla bilgi için bu yazımıza göz gezdirin.
Mod_security sql_injection veya XSS açıklarını kısmi şekilde engelleyecektir. Cpanel ve Plesk gibi kontrol paneller içinde kurulumu kolay olacaktır.
# Stop SQL injection
SecFilter "delete[[:space:]]+from"
SecFilter "select.+from"
Eğer sizin için mümkünse apache/nginx vb. ve php’yi jail ile hapsedin. Bu çok detaylı bir konu olmak ile beraber, detaylı şekilde bir yazıyı kaleme alacağız.
Log dosyalarınızı sürekli takip edin. tail komutu ile loglarınızı kontrol edin. Logların analizini çıkartın.
PHP+Web Server konuları bunlarla sınırlı olmadığı gibi, uzman seviyesi için çok daha fazlasını içermektedir. Yukarıdaki anlatılan işlemler temel seviyede birer güvenlik önlemidir.
Linux işletim sistemi, açık kaynak kodlu özgür bir işletim sistemidir. Günümüzde dünya genelinde pek çok…
Cloud ve dedicated sunucu , günümüzde işletmelerin bilişim altyapılarını yönetmek için en çok tercih ettikleri…
En iyi veri yedekleme yöntemleri, bulut hizmetleri, yedekleme yaparken dikkat edilmesi gerekenlere dair her şey.
VDS (Sanal Ayrılmış Sunucu) donanım sanallaştırmasıdır. Ayrılmış sunucu tamamen tek bir kullanıcıya tahsis edilmiş fiziksel…
Plesk üzerinde, panel lisansınız bittiyse veya ssh üzerinde mail işlemleri yapmak isterseniz, aşağıdaki cli komutlarını…
Bilgi teknolojilerinde, sunucular ve network cihazları her zaman en önemli araçlar arasındadır. Özellikle veri merkezleri…