Apache HTTP Sunucusu Sürüm 2.5

Bu belge, mod_rewrite
başvuru belgelerini tamamlar.
Çeşitli kaynaklara erişimi denetlemek için mod_rewrite
modülünü nasıl kullanabileceğinizi ve diğer ilgili teknikleri açıklar.
mod_rewrite modülünün yaygın kullanımlarına ilişkin,
her birinin nasıl çalıştığının ayrıntılı açıklamalarını içeren birçok
örnek sunulmaktadır.
Resim "Hotlinking"inin Engellenmesi
Robotların Engellenmesi
Reddetme Listesindeki Konakların Engellenmesi
Referer Tabanlı YönlendiriciAşağıdaki teknik, diğer sitelerin resimlerinizi kendi sayfalarına satır içi olarak dahil etme uygulamasını engeller. Bu uygulama genellikle "hotlinking" olarak anılır ve bant genişliğinizin başkasının sitesi için içerik sunmak amacıyla kullanılmasına neden olur.
Bu teknik, isteğe bağlı olan HTTP_REFERER
değişkeninin değerine dayanır. Bu nedenle, bazı kişilerin bu
sınırlamayı atlaması mümkündür. Ancak çoğu kullanıcı başarısız
isteği deneyimleyecektir ve bu, zamanla resmin o diğer siteden
kaldırılmasına yol açacaktır.
Bu durumu ele almanın birkaç yolu vardır.
Bu ilk örnekte, istek sitemizden bir sayfadan başlatılmadıysa
isteği reddederiz. Bu örnek için sitemizin
www.example.com olduğunu varsayıyoruz.
RewriteCond "%{HTTP_REFERER}" "!^$"
RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC]
RewriteRule "\.(gif|jpg|png)$" "-" [F,NC]
Bu ikinci örnekte, isteği reddetmek yerine alternatif bir resim gösteriyoruz.
RewriteCond "%{HTTP_REFERER}" "!^$"
RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC]
RewriteRule "\.(gif|jpg|png)$" "/images/go-away.png" [R,NC]
Üçüncü örnekte, isteği başka bir sitedeki bir resme yönlendiriyoruz.
RewriteCond "%{HTTP_REFERER}" "!^$"
RewriteCond "%{HTTP_REFERER}" "!www.example.com" [NC]
RewriteRule "\.(gif|jpg|png)$" "http://other.example.com/image.gif" [R,NC]
Bu tekniklerden son ikisi, insanların resimlerinizi hotlinking yapmayı bırakmasını sağlamada en etkili olanlardır; çünkü görmeyi bekledikleri resmi göremeyeceklerdir.
Tek yapmak istediğiniz kaynağa erişimi reddetmekse, isteği
başka bir yere yönlendirmek yerine bu,
mod_rewrite kullanılmadan da
gerçekleştirilebilir:
SetEnvIf Referer example\.com localreferer
<FilesMatch "\.(jpg|png|gif)$">
Require env localreferer
</FilesMatch>
Bu tarifle, belirli bir robot veya kullanıcı aracısından gelen sürekli isteklerin nasıl engelleneceğini tartışıyoruz.
Robot dışlama standardı, web sitenizin robotları dışlamak
istediğiniz bölümlerini belirten /robots.txt
adında bir dosya tanımlar. Ancak bazı robotlar bu dosyalara
uymaz.
Bunu gerçekleştirmenin mod_rewrite
kullanmayan yöntemleri olduğunu unutmayın. Ayrıca istemcinin
USER_AGENT dizgesine dayanan herhangi bir tekniğin
kolayca atlanabileceğini de unutmayın; çünkü bu dizge
değiştirilebilir.
Korunacak dizini ve zararlı ya da ısrarcı robotu tanımlayan
istemci USER_AGENT dizgesini belirten bir kural
kümesi kullanıyoruz.
Bu örnekte, NameOfBadRobot adlı bir robotu
/secret/files konumundan engelliyoruz. Kullanıcı
aracısını yalnızca belirli bir kaynaktan engellemek istiyorsanız
bir IP adresi aralığı da belirtebilirsiniz.
RewriteCond "%{HTTP_USER_AGENT}" "^NameOfBadRobot"
RewriteCond "%{REMOTE_ADDR}" "=123\.45\.67\.[8-9]"
RewriteRule "^/secret/files/" "-" [F]
Bunun için mod_rewrite kullanmak yerine, aynı
sonucu burada gösterildiği gibi alternatif yollarla elde
edebilirsiniz:
SetEnvIfNoCase User-Agent ^NameOfBadRobot goaway
<Location "/secret/files">
<RequireAll>
Require all granted
Require not env goaway
</RequireAll>
</Location>
Yukarıda belirtildiği gibi, bu teknik USER_AGENT
istek başlığını değiştirerek kolayca atlanabilir. Sürekli bir
saldırıyla karşılaşıyorsanız, bunu güvenlik duvarınız gibi daha
üst bir düzeyde engellemeyi düşünmelisiniz.
hosts.deny gibi bir konak listesi tutmak ve bu
konakların sunucumuza erişimini engellemek istiyoruz.
RewriteEngine on
RewriteMap hosts-deny "txt:/path/to/hosts.deny"
RewriteCond "${hosts-deny:%{REMOTE_ADDR}|NOT-FOUND}" "!=NOT-FOUND" [OR]
RewriteCond "${hosts-deny:%{REMOTE_HOST}|NOT-FOUND}" "!=NOT-FOUND"
RewriteRule "^" "-" [F]
##
## hosts.deny
##
## DİKKAT! Bu bir liste değil, bir eşlem dosyasıdır.
## mod_rewrite bunu anahtar/değer çiftleri olarak çözümler,
## bu yüzden her girdi için en azından bir yapay "-" değeri
## mevcut olmalıdır.
##
193.102.180.41 -
bsdti1.sdm.de -
192.76.162.40 -
İkinci RewriteCond, istemci IP adreslerinin çözümlenmesi için
HostNameLookups özelliğinin açık olduğunu varsayar. Durum böyle
değilse, ikinci RewriteCond'u kaldırmalı ve birinci RewriteCond'dan
[OR] bayrağını çıkarmalısınız.
İstekleri, isteğin geldiği Referer'a göre, her Referer için farklı hedeflerle yeniden yönlendirir.
Aşağıdaki kural kümesi, her Referer'ı bir yönlendirme hedefiyle ilişkilendirmek için bir eşlem dosyası kullanır.
RewriteMap deflector "txt:/path/to/deflector.map"
RewriteCond "%{HTTP_REFERER}" !=""
RewriteCond "${deflector:%{HTTP_REFERER}}" =-
RewriteRule "^" "%{HTTP_REFERER}" [R,L]
RewriteCond "%{HTTP_REFERER}" !=""
RewriteCond "${deflector:%{HTTP_REFERER}|NOT-FOUND}" "!=NOT-FOUND"
RewriteRule "^" "${deflector:%{HTTP_REFERER}}" [R,L]
Eşlem dosyası, her referer için yeniden yönlendirme hedeflerini listeler veya yalnızca geldikleri yere geri yönlendirmek istiyorsak eşleme bir "-" konur:
## ## deflector.map ## http://badguys.example.com/bad/index.html - http://badguys.example.com/bad/index2.html - http://badguys.example.com/bad/index3.html http://somewhere.example.com/