<-
Apache > HTTP Sunucusu > Belgeleme > Sürüm 2.5 > Rewrite

Erişim Denetimi için mod_rewrite Kullanımı

Mevcut Diller:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn 

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.

Bu örneklerin birçoğunun sizin sunucu yapılandırmanızda değişiklik yapılmadan çalışmayacağını unutmayın; bu nedenle örnekleri yapılandırmanıza kopyalayıp yapıştırmak yerine anlamanız önemlidir.

Ayrıca bakınız:

top

Resim "Hotlinking"inin Engellenmesi

Açıklama:

Aş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.

Çözüm:

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.

Tartışma:

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>
top

Robotların Engellenmesi

Açıklama:

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.

Çözüm:

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]
Tartışma:

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.

top

Reddetme Listesindeki Konakların Engellenmesi

Açıklama:

hosts.deny gibi bir konak listesi tutmak ve bu konakların sunucumuza erişimini engellemek istiyoruz.

Çözüm:
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 -

Tartışma:

İ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.

top

Referer Tabanlı Yönlendirici

Açıklama:

İstekleri, isteğin geldiği Referer'a göre, her Referer için farklı hedeflerle yeniden yönlendirir.

Çözüm:

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/

Mevcut Diller:  de  |  en  |  es  |  fr  |  ja  |  ko  |  tr  |  zh-cn