Apache’de HTTP_REFERER Kullanarak Servlet Sayfalarına Kullanıcı Erişimini Engelleme

Web uygulamaları büyüdükçe, hassas sayfaların güvenliğini sağlama ve yetkisiz erişimden koruma ihtiyacı da artıyor, özellikle otomatik botlardan. Eğer belirli servlet sayfalarına kullanıcıların doğrudan erişimini engellemeniz gereken bir durumla karşı karşıyaysanız, ancak uygulama sunucusunu değiştirme yeteneğiniz yoksa, Apache’nin HTTP_REFERER başlığını kullanmak çözümünüzün bir parçası olabilir.

Bu yazıda, .htaccess dosyanızda HTTP_REFERER kullanarak erişimi etkili bir şekilde nasıl engelleyebileceğinizi keşfedeceğiz, adımları ayrıntılı bir şekilde açıklayacak ve amacınıza ulaşmanıza yardımcı olmak için net örnekler sunacağız.

HTTP_REFERER’ı Anlamak

HTTP_REFERER, istenen kaynağa bağlantı veren web sayfasının adresini tanımlayan bir HTTP başlığıdır. Basitçe söylemek gerekirse, bir kullanıcının belirli bir sayfaya erişmeden önce nereden geldiğini sunucunuza bildirir.

Erişimi Engellemek için Neden HTTP_REFERER Kullanmalıyız?

  1. Güvenlik Önlemi: Tamamen güvenilir olmasa da, yetkisiz erişime karşı ilk bir engel işlevi görür.
  2. Uygulama Kolaylığı: Web sunucusuna hakimseniz ancak uygulama mantığına erişiminiz yoksa, bu pratik bir yaklaşımdır.
  3. Otomatik Taleplerin Önlenmesi: Formlarınızı güvenli ve yalnızca meşru yollarla işlevsel tutmak istiyorsanız, dış kaynaklardan veya botlardan gelen doğrudan talepleri engellemek önemlidir.

.htaccess Yeniden Yazım Kurallarını Ayarlamak

HTTP_REFERER temelinde engelleme uygulamak için, .htaccess dosyanıza kurallar eklemeniz gerekecek. İşte kurallarınızı etkili bir şekilde yapılandırmanın yolu.

Temel Yeniden Yazım Kuralı

Bunu gibi basit bir kural ile başlayabilirsiniz:

RewriteEngine on 

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteRule (servlet1|servlet2)/.+ - [F]

Açıklama:

  • RewriteEngine on: Yeniden yazım motorunu etkinleştirir.
  • RewriteCond, HTTP_REFERER‘ın belirtilen sitenizle eşleşmediğini kontrol eder.
  • RewriteRule, servlet1 veya servlet2‘ye yönelik istekleri hedef alır.

Gelişmiş Yeniden Yazım Kuralı

Ancak, yalnızca sitenizden gelen meşru istekleri geçerli kılmak ve sorgu dizeleri içerenleri engellemek istiyorsanız, daha karmaşık bir mantığa ihtiyacınız var:

RewriteCond %{HTTP_REFERER} !^http://mywebaddress(.cl)?/.* [NC]
RewriteCond %{QUERY_STRING} ^.+$ [OR]
RewriteCond %{REQUEST_METHOD} ^POST$ [OR]
RewriteCond %{PATH_INFO} ^.+$
RewriteRule (servlet1|servlet2)\b - [F]

Gelişmiş Kuralın Ayrıntılı Açıklaması:

  • İlk Koşul: İsteklerin belirtilen site URL’lerinden gelmediğini doğrular.
  • İkinci Koşul: Boş olmayan sorgu dizeleri içeren istekleri engeller.
  • Üçüncü Koşul: Doğrudan POST isteklerini engeller.
  • Dördüncü Koşul: PATH_INFO içeren istekleri engeller.

Bu koşulların birleşimi, yalnızca sitenizin ortamını geçerek gelen geçerli isteklerin belirtilen servlet sayfalarına ulaşmasını sağlar.

Sonuç

HTTP_REFERER‘a güvenmek tamamen güvenli bir çözüm sağlamasa da, hassas sayfalara erişimi sınırlamak için etkili bir ilk önlemdir. Bu yöntem, uygulama düzeyindeki kısıtlamaların kapsamlı değişikliklere izin vermediği durumlarda özellikle faydalıdır.

Bu yaklaşımın bir güvenlik katmanı eklediğini fakat tam bir çözüm sunmadığını unutmayın. Her zaman sunucu tarafı doğrulaması güçlendirmeyi ve uygulamanız ve kullanıcı tabanınız geliştikçe ek güvenlik önlemlerini araştırmayı dikkate alın.

Bu yöntemleri denediyseniz veya ek bilgileriniz varsa, lütfen bir yorum bırakın—deneyimleriniz, başkalarının benzer zorluklarla başa çıkmasına yardımcı olabilir!