- Katılım
- 30 Nisan 2025
- Mesajlar
- 203.820
- Tepkime puanı
- 8
- Puanları
- 13.051
Web uygulamalarının güvenliği yalnızca yazılan kodla değil, uygulamanın çalıştığı ortamın doğru yapılandırılmasıyla da sağlanır. PHP ile geliştirilen sistemlerde bu yapılandırmanın kalbi ise php.ini dosyasıdır.
OWASP (Open Web Application Security Project), güvenli bir PHP ortamı için dikkat edilmesi gereken temel php.ini ayarlarını bir araya getiren bir rehber yayınladı. Bu yazıda, OWASP’in önerileri doğrultusunda PHP yapılandırmanızı nasıl daha güvenli hale getirebileceğinizi ele alacağız.
Modern PHP sürümlerinde register_globals varsayılan olarak kapalıdır; ancak yine de kontrol edilmesi gerekir.
Web uygulama güvenliği yalnızca kod düzeyinde değil, aynı zamanda yapılandırma seviyesinde de düşünülmelidir. php.ini dosyasının doğru şekilde yapılandırılması, sisteminize yapılabilecek birçok saldırının önüne geçebilir. Bu nedenle, uygulamanızı canlıya almadan önce bu ayarları gözden geçirmeniz büyük önem taşır.
OWASP’in PHP Configuration Cheat Sheet belgesi, güvenli yapılandırma konusunda kapsamlı ve güncel bir kaynaktır. Uygulamanızın güvenliğini ciddiye alıyorsanız, bu önerileri dikkate almanız gereklidir.
Hata Yönetimi
Hataların doğrudan kullanıcıya gösterilmesi, sisteminizle ilgili teknik bilgilerin açığa çıkmasına neden olabilir. Bu bilgiler kötü niyetli kişiler tarafından suistimal edilebilir.
INI:
display_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
Bu şekilde hatalar loglanır ama kullanıcıya gösterilmez. Özellikle üretim (production) ortamında bu ayarların doğru yapılandırılması kritik öneme sahiptir.
Tehlikeli Fonksiyonların Devre Dışı Bırakılması
PHP, işletim sistemi seviyesinde komut çalıştırabilen güçlü fonksiyonlara sahiptir. Ancak bu fonksiyonlar yanlış ellerde büyük risk oluşturur.
INI:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen
Sadece uygulamanızın ihtiyaç duyduğu işlevlere izin vermek en iyi uygulamadır. Gereksiz tüm sistem çağrıları engellenmelidir.
Uzak Dosya İçeri Aktarımını Engelleme
PHP’nin uzak bir URL’den dosya okuması veya dahil etmesi, kötü niyetli bir dosyanın çalıştırılmasına sebep olabilir. Bu tür saldırılar genellikle “Remote File Inclusion” olarak adlandırılır.
INI:
allow_url_fopen = Off
allow_url_include = Off
Bu ayarlar sayesinde yalnızca yerel kaynaklardan içerik alınabilir, uzak dosyaların çalıştırılması engellenir.
Dosya Sistemi Sınırlamaları: open_basedir
open_basedir direktifi, PHP’nin erişebileceği dizinleri sınırlandırarak sistemde başka dosyalara ulaşmasını engeller. Bu sayede uygulama sadece belirlenen dizinler içerisinde işlem yapabilir.Örnek:
INI:
open_basedir = /var/www/html/
Bu sınırlandırma özellikle paylaşımlı hosting ortamlarında son derece önemlidir.
Oturum Güvenliği
PHP oturumları, kullanıcı doğrulaması gibi işlemler için kritik öneme sahiptir. Bu oturumlara yönelik yapılacak saldırılar ciddi güvenlik açıklarına neden olabilir.
INI:
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1
cookie_httponly: JavaScript ile çerezlere erişimi engeller.
cookie_secure: Çerezlerin sadece HTTPS bağlantılarında iletilmesini sağlar.
use_strict_mode: Rastgele ve tahmin edilmesi zor oturum kimlikleri üretir.
Dosya Yüklemelerini Sınırlandırma
Yüklenen dosyalarla sistemin istismar edilmesini önlemek için belirli sınırlar koymak gerekir. Yüklenebilecek maksimum dosya boyutu, toplam POST verisi ve aynı anda kaç dosya yüklenebileceği sınırlanmalıdır.
INI:
file_uploads = On
upload_max_filesize = 2M
post_max_size = 8M
max_file_uploads = 5
upload_tmp_dir = /tmp/php_uploads
Bu sınırlar sayesinde hem sistem kaynaklarının korunması sağlanır hem de büyük dosyalarla sistemin yavaşlatılması veya çökertilmesi engellenir.
PHP Sürüm Bilgisini Gizleme
Varsayılan olarak, PHP sürüm bilgisi HTTP başlıklarında görünür. Bu bilgi, saldırganlar tarafından bilinen güvenlik açıklarına yönelik hedefli saldırılar için kullanılabilir.
INI:
expose_php = Off
Bu ayarla PHP sürüm bilgisi istemcilere gönderilmez.
Global Değişkenlerin ve Girdi Sırasının Kontrolü
Verilerin işlenme sırası ve hangi kaynaklardan geldiği belirlenerek veri güvenliği sağlanabilir. Ayrıca global değişkenlerin otomatik olarak oluşturulması da ciddi güvenlik açıkları doğurabilir.
INI:
variables_order = "GPCS"
request_order = "GP"
register_globals = Off
Php Genel Ayarlar
INI:
doc_root = /path/DocumentRoot/PHP-scripts/
open_basedir = /path/DocumentRoot/PHP-scripts/
include_path = /path/PHP-pear/
extension_dir = /path/PHP-extensions/
mime_magic.magicfile = /path/PHP-magic.mime
allow_url_fopen = Off
allow_url_include = Off
variables_order = "GPCS"
allow_webdav_methods = Off
session.gc_maxlifetime = 600
Php Oturum Ayarları
INI:
session.save_path = /path/PHP-session/
session.name = myPHPSESSID
session.auto_start = Off
session.use_trans_sid = 0
session.cookie_domain = full.qualified.domain.name
#session.cookie_path = /application/path/
session.use_strict_mode = 1
session.use_cookies = 1
session.use_only_cookies = 1
session.cookie_lifetime = 14400 # 4 hours
session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = Strict
session.cache_expire = 30
session.sid_length = 256
session.sid_bits_per_character = 6
