File Inclusion Saldırısı Nedir, Nasıl Korunuruz?
File inclusion saldırısı, bir web uygulamasının, kullanıcı tarafından sağlanan dosya adlarını veya yollarını içe aktarmasına izin vermesi durumunda ortaya çıkan bir güvenlik açığıdır. Bu tür bir saldırı, genellikle PHP gibi sunucu tarafı dillerinde, dosya içe aktarma işlevlerinin (örneğin include
, require
, include_once
, require_once
) kötüye kullanılmasıyla gerçekleştirilir. File Inclusion saldırısı en yaygın site hackleme yöntemleri arasındadır ve gerekli önlemler alınmazsa ciddi sorunlara yol açar.
File Inclusion Saldırısının Temel Türleri:
- Local File Inclusion (LFI – Yerel Dosya Dahil Etme): Bu türde, saldırgan sunucuda mevcut olan yerel dosyaları içe aktararak hassas bilgilere erişebilir veya sunucuda kod çalıştırabilir. Örneğin, bir saldırgan,
/etc/passwd
gibi bir dosyanın içeriğini elde edebilir. - Remote File Inclusion (RFI – Uzak Dosya Dahil Etme): Bu türde, saldırgan uzak bir sunucudan dosya içe aktarabilir. Bu, saldırganın kötü amaçlı kodu sunucuya yüklemesine ve çalıştırmasına olanak tanır. Özellikle, uzak bir URL’den bir dosya içe aktararak, uzaktaki kötü niyetli kodun sunucuda çalışmasına neden olabilir.
File inclusion Nasıl Çalışır?
Bir web uygulamasında, dosya içe aktarma işlevi genellikle kullanıcı tarafından sağlanan parametrelere dayanır. Eğer bu parametreler yeterince doğrulanmazsa, bir saldırgan bu parametreleri manipüle ederek yerel veya uzak dosyaların içe aktarılmasına neden olabilir.
File inclusion için Örnek Senaryo:
Bir web uygulamasında, kullanıcıların page
parametresine geçici bir dosya adı girerek sayfa içeriğini gösterebildiği bir özellik olduğunu düşünelim:
<?php
$page = $_GET['page'];
include($page);
?>
Eğer kullanıcı page
parametresine ../../etc/passwd
gibi bir değer girerse, bu dosya içe aktarılır ve hassas bilgilere erişebilir.
File inclusion saldırılarını önlemek için aşağıdaki en iyi güvenlik uygulamalarını ve teknikleri uygulayabilirsiniz:
1. Dosya Yolunu Doğrulama ve Sınırlama
- Beyaz Liste Kullanımı: Yalnızca belirli, önceden tanımlanmış dosyaların içe aktarılmasına izin verin. Dosya adlarını ve yollarını belirli bir liste ile sınırlayarak yalnızca güvenilir dosyaların yüklenmesini sağlayabilirsiniz.
- Yol Manipülasyonunu Önleme: Kullanıcının girdiği dosya yolunda
../
,..\\
gibi geri dönme veya geçiş yapma karakterlerini engelleyin. Bu karakterler, kullanıcıların kök dizine veya diğer hassas dizinlere erişmeye çalışmasını sağlayabilir.
2. Dosya Adı ve İçeriğini Doğrulama
- Girdi Doğrulama: Kullanıcının sağladığı dosya adını ve yolunu doğrulamak ve sadece beklenen değerleri kabul etmek önemlidir. Örneğin, yalnızca alfasayısal karakterler veya belirli bir uzantı (örneğin
.php
,.html
) içeren dosyaları kabul edebilirsiniz. - Uzantı Filtreleme: İçeriği yalnızca belirli dosya türlerine (örneğin
.php
yerine.txt
veya.html
) sınırlandırarak güvenlik risklerini azaltabilirsiniz.
3. Güvenlik Ayarları ve Yapılandırmalar
-
- Uzak Dosya Dahil Etmeyi Devre Dışı Bırakma: PHP yapılandırma dosyasında (
php.ini
),allow_url_include
veallow_url_fopen
seçenekleriniOff
olarak ayarlayın. Bu, uzak dosya içe aktarmalarını devre dışı bırakır. - Hata Raporlama ve Dizin Listelerini Kapatma: Hataların veya dizin içeriğinin kullanıcıya açık olarak gösterilmesini engelleyin. PHP’de hata raporlama ayarlarını kapatın ve dizin listelemeyi devre dışı bırakın.
- Uzak Dosya Dahil Etmeyi Devre Dışı Bırakma: PHP yapılandırma dosyasında (
4. Erişim Kontrolleri
- Yeterli Yetkilendirme: Dosyalar üzerinde yetki kontrolleri yaparak yalnızca yetkili kullanıcıların belirli dosyalara erişmesini sağlayın. Erişim kontrol mekanizmaları kullanarak sadece belirli kullanıcıların dosya içe aktarmasına izin verin.
- Dosya İzinlerini Kontrol Etme: Sunucuda dosyaların ve dizinlerin izinlerini doğru şekilde yapılandırın. Hassas dosyaların yazılabilir veya okunabilir olmasını engelleyin.
5. Güvenlik Duvarları ve Güvenlik Araçları
- Web Uygulama Güvenlik Duvarı (WAF) Kullanımı: Güvenlik duvarları, şüpheli dosya içe aktarma girişimlerini tespit edebilir ve engelleyebilir. WAF’lar, dosya içe aktarma açığını hedef alan saldırılara karşı koruma sağlayabilir.
6. Kod İnceleme ve Güvenlik Testleri
- Düzenli Güvenlik Testleri: Uygulamanızı düzenli olarak güvenlik testlerine tabi tutun. Penetrasyon testleri ve güvenlik taramaları, potansiyel güvenlik açıklarını belirlemeye yardımcı olabilir.
- Kod İnceleme: Kodunuzu ve özellikle dosya içe aktarma işlevlerini düzenli olarak gözden geçirin ve güvenlik açıklarına karşı koruyun.
Bu önlemleri alarak file inclusion saldırılarına karşı güçlü bir savunma mekanizması oluşturabilirsiniz. Güvenlik her zaman bir süreçtir ve düzenli olarak güncellemeler ve iyileştirmeler gerektirir.