404 Koruması: .php dosyalarına yapılan kötü niyetli erişimleri engelleyin

WordPress siteniz, doğrudan .php uzantılı dosyalara yapılan yetkisiz erişim taleplerine karşı yeterince korunmuyor olabilir. Eğer bu tür istekler 404 hata sayfası ile karşılanmıyor veya engellenmiyorsa, saldırganlar var olmayan ya da erişim izni olmayan .php dosyalarına ulaşmaya çalışabilir. Bu durum, siteniz için ciddi bir güvenlik açığı oluşturabilir.

Amaç:

Sitenin kök dizininde ya da wp-content, wp-includes gibi klasörlerde bulunan (ya da olmayan) .php dosyalarına doğrudan erişim denemelerini engellemek.

Bu tür istekleri ya 404’e yönlendirmek ya da erişimi tamamen yasaklamak.

Çözüm: .htaccess ile .php dosyalarına gelen şüpheli istekleri engelle

1. wp-content/uploads gibi yerlere erişimi engelle (.php için)
uploads klasörü kullanıcı dosyaları içindir — burada .php çalışmamalıdır. Şu kuralı .htaccess ile uygula:

/wp-content/uploads/.htaccess içine şunu ekle:

<FilesMatch "\.php$">
Order Allow,Deny
Deny from all
</FilesMatch>

Bu, uploads klasöründe PHP çalışmasını tamamen engeller.

2. Ana .htaccess dosyasında bilinmeyen .php dosyalarına 404 dön

Aşağıdaki kodu .htaccess yapısına ek olarak koyabiliriz. wp-admin, wp-login.php gibi bilinen yollar hariç tüm bilinmeyen .php erişimlerine 404 döner:

# Belirli olmayan .php dosyalarına erişimi engelle
<FilesMatch "^(?!index\.php|wp-login\.php|wp-cron\.php|xmlrpc\.php|wp-admin).*\.php$">
Require all denied
</FilesMatch>

Alternatif olarak şu da kullanılabilir:

RewriteCond %{THE_REQUEST} \.php [NC]
RewriteCond %{REQUEST_URI} !^/index\.php$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-login\.php$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-cron\.php$ [NC]
RewriteRule .* - [R=404,L]

Bu örnek, yalnızca belirli .php dosyalarının çağrılmasına izin verir; diğerlerini 404 ile engeller.

Ekstra Tavsiyeler

  • Özellikle wp-content, uploads, wp-includes gibi klasörlere .php dosya yüklenmesini engelle.
  • Güvenlik eklentileri (örneğin Wordfence, All In One WP Security) bu tür saldırı denemelerini raporlayabilir.

Örnek .htaccess dosyası

<IfModule mod_rewrite.c>
RewriteEngine On

# Kötü User-Agent'ları engelle
RewriteCond %{HTTP_USER_AGENT} ^$ [OR]
RewriteCond %{HTTP_USER_AGENT} (crawler|harvest|libwww|wget|python|scan|nmap|sqlmap|curl|masscan|badbot|scrapy|httpclient|httplib|perl) [NC]
RewriteRule ^.* - [F,L]

# Belirli olmayan .php dosyalarına erişimi 404 ile engelle
RewriteCond %{THE_REQUEST} \.php [NC]
RewriteCond %{REQUEST_URI} !^/index\.php$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-login\.php$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-cron\.php$ [NC]
RewriteCond %{REQUEST_URI} !^/xmlrpc\.php$ [NC]
RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteRule .* - [R=404,L]

# Yetkilendirme başlıkları için
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

# WordPress standart yönlendirme kuralları
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Açıklamalar:

  • User-Agent filtresi: Zararlı botları engeller.
  • 404 koruması: Sadece index.php, wp-login.php, wp-cron.php, xmlrpc.php, wp-admin gibi bilinen yollar hariç .php dosya çağrılarına 404 döner.
  • WordPress yönlendirme kurallarına dokunulmadı.
  • .htaccess sıralaması ve RewriteRule kuralları öncelik sırasına göre doğru şekilde yerleştirildi.

Sonraki Adım:

  1. Bu dosyayı mevcut .htaccess dosyanla değiştir veya üzerine yazmadan önce yedeğini al.
  2. Tarayıcıdan şu yolları test edebilirsin:
  • /dosya.php → 404 vermeli
  • /wp-login.php → Giriş sayfası açılmalı
  • /index.php → Ana sayfa çalışmalı
  • Kötü bot User-Agent ile erişim (örneğin: curl) → 403 vermeli

    Bir yanıt yazın