Cloudflare Scrape Shield ile İçerik Koruma
Web sitenizin içeriğini korumak, özellikle görsel içerik, yazılı materyaller ve telif hakkıyla korunan veriler söz konusu olduğunda ciddi bir sorun haline geliyor. Cloudflare Scrape Shield tam da bu noktada devreye giriyor. İçerik kazıma botlarına, otomatik veri çekme araçlarına ve e-posta adres toplayıcılara karşı oldukça etkili bir kalkan oluşturuyor. Bugün bu özelliği hem teorik hem de pratik açıdan ele alacağız.
Scrape Shield Nedir ve Neden Önemlidir?
Cloudflare Scrape Shield, üç temel bileşenden oluşan bir içerik koruma katmanıdır. E-posta adresi gizleme, sunucu taraflı hariç tutmalar ve sıcak bağlantı koruması bu üç bileşeni oluşturur. Ücretsiz Cloudflare planında bile bu özelliklerin büyük kısmına erişebilirsiniz.
Gerçek dünya senaryosuna bakalım: Diyelim ki bir fotoğrafçılık blogu işletiyorsunuz. Rakip siteler sizin yüksek çözünürlüklü fotoğraflarınızı kendi sunucularına yönlendirerek hem sizin bant genişliğinizi tüketiyor hem de içeriğinizi ücretsiz kullanıyor. Ya da bir e-ticaret sitesi yöneticisisiniz ve rakipler fiyat botlarıyla sürekli ürün fiyatlarınızı çekiyor. Scrape Shield bu sorunların tamamına karşı çözüm üretiyor.
Cloudflare Dashboard Üzerinden Temel Kurulum
Scrape Shield özelliklerine erişmek için Cloudflare dashboard üzerinden şu adımları izleyin:
- Cloudflare hesabınıza giriş yapın
- İlgili domain’i seçin
- Sol menüden Scrape Shield seçeneğine tıklayın
Burada üç ana sekme göreceksiniz: Email Address Obfuscation, Server-side Excludes ve Hotlink Protection.
Cloudflare API üzerinden bu özellikleri yönetmek isteyenler için aşağıdaki örnekleri kullanabilirsiniz:
# Cloudflare API ile zone bilgilerini çekme
curl -X GET "https://api.cloudflare.com/client/v4/zones"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
Bu komutun çıktısında zone_id değerinizi not alın. Tüm sonraki API çağrılarında bu değere ihtiyacınız olacak.
E-posta Adresi Gizleme (Email Address Obfuscation)
E-posta adresinizi HTML içinde açıkça yazdığınızda, spam botları bu adresleri saniyeler içinde toplayabilir. Cloudflare’in e-posta gizleme özelliği, e-posta adreslerinizi JavaScript ile encode ederek bot tarayıcılarından gizler. Gerçek kullanıcılar sayfayı açtığında adresi normal şekilde görür ve tıklayabilir.
# E-posta gizlemeyi API üzerinden etkinleştirme
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/email_obfuscation"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
--data '{"value":"on"}'
Mevcut durumu kontrol etmek için:
# E-posta gizleme durumunu sorgulama
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/email_obfuscation"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
Önemli bir not: E-posta gizleme özelliğinin çalışması için sayfanızın text/html content-type ile sunulması gerekiyor. Ayrıca e-posta adresinizin formatında veya düz metin olarak HTML içinde bulunması lazım.
E-posta Gizlemenin Sınırları
Bu özellik mükemmel bir çözüm değil. JavaScript’i devre dışı bırakan gelişmiş botlar encode edilmiş içeriği yine de çözebilir. Dolayısıyla gerçekten hassas iletişim bilgilerini bir iletişim formuyla korumak, e-posta adresini doğrudan sayfada bulundurmaktan çok daha güvenlidir.
Server-Side Excludes (Sunucu Taraflı Hariç Tutmalar)
Bu özellik, sayfa içindeki belirli içerikleri şüpheli ziyaretçilerden gizlemenizi sağlar. Cloudflare, bir ziyaretçiyi şüpheli olarak değerlendirdiğinde (örneğin tehdit puanı yüksek bir IP’den geliyorsa) bu alanları otomatik olarak gizler.
HTML’de kullanımı şu şekilde:
<!--sse-->
Bu içerik sadece güvenilir ziyaretçilere gösterilecek.
Fiyat bilgisi: 299 TL
Stok durumu: 15 adet
<!--/sse-->
Bu comment tag’lerini kullandığınızda, Cloudflare tehdit puanı yüksek ziyaretçilere bu içeriği göstermez. Normal kullanıcılar ise hiçbir şey fark etmeden içeriği görmeye devam eder.
# Server-side excludes özelliğini API ile kontrol etme
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/server_side_exclude"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
Etkinleştirmek için:
# Server-side excludes etkinleştirme
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/server_side_exclude"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
--data '{"value":"on"}'
Pratik Kullanım Senaryosu
Bir fiyat karşılaştırma sitesi yönettiğinizi düşünün. Rakip siteler sürekli fiyatlarınızı kazıyor. SSE tag’lerini fiyat bilgilerinizin etrafına eklerseniz, bot trafiğini engellerken gerçek müşterileriniz fiyatları görmeye devam eder. Tabii bu yüzde yüz çözüm değil; kararlı bir bot operatörü bunu da aşabilir, ama düşük seviyeli otomatik saldırıların büyük çoğunluğunu engeller.
Hotlink Koruması
Hotlink koruması, en sık kullanılan Scrape Shield özelliğidir. Başka sitelerin sizin sunucunuzda barındırdığınız görselleri doğrudan kendi sayfalarında göstermesini engeller. Bu durum hem bant genişliğinizi tüketir hem de içeriğinizin başkaları tarafından kötüye kullanılmasına yol açar.
# Hotlink korumasını etkinleştirme
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/ZONE_ID/settings/hotlink_protection"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
--data '{"value":"on"}'
Hotlink korumasını etkinleştirdiğinizde, Cloudflare gelen isteklerdeki Referer header’ını kontrol eder. Eğer istek sizin domain’inizden gelmiyor ve bir görsel dosyasını talep ediyorsa, 403 hatası döner.
Hotlink Korumasının Dikkat Noktaları
Bu özelliği açmadan önce şunları göz önünde bulundurmalısınız:
- RSS okuyucular: Bazı RSS okuyucuları görselleri farklı domain üzerinden çekeceğinden görsel kırıkları oluşabilir
- E-posta istemcileri: HTML e-postalarınızdaki görseller e-posta istemcilerinde görünmeyebilir
- Sosyal medya önizlemeleri: Facebook, Twitter gibi platformların önizleme botları engellenebilir
- CDN ve proxy kullanımı: Başka bir CDN arkasındaysanız referrer bilgisi kaybolabilir
Bu sorunları çözmek için Cloudflare WAF kurallarıyla istisnalar tanımlayabilirsiniz.
WAF Rules ile Scrape Shield’i Güçlendirme
Scrape Shield’in temel özellikleri yetmediğinde, Cloudflare WAF kurallarıyla daha granüler kontrol sağlayabilirsiniz.
# WAF custom rule oluşturma - bot trafiğini engelleme
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/firewall/rules"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
--data '[{
"filter": {
"expression": "(http.user_agent contains "Scrapy") or (http.user_agent contains "python-requests") or (http.user_agent contains "curl")",
"paused": false,
"description": "Bot User Agent Engelleme"
},
"action": "block",
"description": "Bilinen bot user agent engelleme"
}]'
Bu kural Scrapy, python-requests ve curl gibi yaygın scraping araçlarını engeller. Ancak dikkatli olun: curl’ü engellemek bazen meşru API istemcilerini de etkileyebilir.
Rate Limiting ile Destekleme
Scrape Shield’i rate limiting ile kombine etmek çok daha etkili bir koruma sağlar:
# API endpoint için rate limit kuralı
curl -X POST "https://api.cloudflare.com/client/v4/zones/ZONE_ID/rate_limits"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
--data '{
"threshold": 100,
"period": 60,
"match": {
"request": {
"url_pattern": "ornek.com/api/*",
"methods": ["GET"],
"schemes": ["HTTPS"]
}
},
"action": {
"mode": "simulate",
"timeout": 600,
"response": {
"content_type": "text/plain",
"body": "Cok fazla istek gonderdiniz. Lutfen bekleyin."
}
},
"description": "API rate limiting"
}'
Cloudflare Workers ile Gelişmiş İçerik Koruma
Cloudflare Workers, içerik koruma konusunda Scrape Shield’in ötesine geçmenizi sağlar. Kendi özel mantığınızı edge’de çalıştırabilirsiniz.
// Worker: Görsel hotlink koruması ve bot tespiti
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
const url = new URL(request.url)
const userAgent = request.headers.get('User-Agent') || ''
const referer = request.headers.get('Referer') || ''
// Görsel dosyaları için kontrol
const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg']
const isImage = imageExtensions.some(ext => url.pathname.toLowerCase().endsWith(ext))
if (isImage) {
// Referer kontrolü
if (referer && !referer.includes('ornek.com')) {
return new Response('Hotlink koruması aktif', {
status: 403,
headers: {
'Content-Type': 'text/plain',
'X-Blocked-By': 'Hotlink-Protection'
}
})
}
// Bilinen bot user agent'larını engelle
const botPatterns = ['Scrapy', 'python-requests', 'wget', 'libwww-perl']
const isBot = botPatterns.some(pattern => userAgent.includes(pattern))
if (isBot) {
return new Response('Bot trafiği engellendi', { status: 403 })
}
}
return fetch(request)
}
Bu Worker’ı deploy etmek için Cloudflare dashboard üzerinden Workers bölümüne gidin veya Wrangler CLI kullanın:
# Wrangler CLI kurulumu ve Worker deploy
npm install -g wrangler
wrangler login
wrangler publish
Nginx ile Sunucu Taraflı Destekleme
Cloudflare katmanına ek olarak, kendi web sunucunuzda da koruma katmanı oluşturabilirsiniz. Böylece Cloudflare’i bypass eden trafik de korunmuş olur.
# /etc/nginx/conf.d/scrape-protection.conf
# Botlara karşı user-agent bazlı engelleme
map $http_user_agent $blocked_agent {
default 0;
~*scrapy 1;
~*python 1;
~*wget 1;
~*libwww 1;
~*HTTrack 1;
~*harvest 1;
~*SiteSnagger 1;
}
server {
listen 443 ssl;
server_name ornek.com;
# Bot engelleme
if ($blocked_agent) {
return 403 "Bot trafiği engellendi";
}
# Gorsel hotlink koruması
location ~* .(jpg|jpeg|png|gif|webp|svg)$ {
valid_referers none blocked server_names ornek.com *.ornek.com;
if ($invalid_referer) {
return 403;
}
# Cache headers
expires 30d;
add_header Cache-Control "public, immutable";
}
# Rate limiting
limit_req_zone $binary_remote_addr zone=scraping:10m rate=30r/m;
limit_req zone=scraping burst=10 nodelay;
}
Nginx konfigürasyonunu test edip yeniden yükleyin:
# Nginx konfigürasyon testi ve reload
nginx -t && systemctl reload nginx
Scrape Shield Durumunu İzleme ve Raporlama
Koruma mekanizmalarınızın işe yarayıp yaramadığını ölçmek kritik önem taşır. Cloudflare Analytics API’sini kullanarak engellenmiş istekleri takip edebilirsiniz:
# Son 24 saatteki güvenlik olaylarını çekme
curl -X GET "https://api.cloudflare.com/client/v4/zones/ZONE_ID/analytics/events"
-H "X-Auth-Email: [email protected]"
-H "X-Auth-Key: API_ANAHTARINIZ"
-H "Content-Type: application/json"
--data-urlencode "since=$(date -u -d '24 hours ago' '+%Y-%m-%dT%H:%M:%SZ')"
--data-urlencode "until=$(date -u '+%Y-%m-%dT%H:%M:%SZ')"
Dashboard üzerinden ise Security > Events bölümünden engellenen istekleri, tehdit kategorilerini ve kaynak IP’leri görebilirsiniz. Buradaki verileri düzenli olarak incelemek, yeni saldırı vektörlerine karşı kurallarınızı güncellemenizi sağlar.
Gerçek Dünya Senaryosu: E-ticaret Sitesi Koruması
Bir müşterimizin e-ticaret sitesini ele alalım. Rakip firmalar her gün yüzlerce istekle ürün fiyatlarını ve stok bilgilerini çekiyordu. Bu durum hem sunucu yükünü artırıyordu hem de fiyat stratejilerini şeffaf hale getiriyordu.
Uyguladığımız çözüm şu adımlardan oluştu:
- Hotlink koruması: Ürün görsellerinin başka sitelerde kullanımını engelledi
- SSE tag’leri: Fiyat ve stok bilgilerini şüpheli trafikten gizledi
- WAF kuralları: Bilinen scraping araçlarını ve yüksek frekanslı IP’leri engelledi
- Rate limiting: Dakikada 50’den fazla istek gönderen IP’lere CAPTCHA zorlaması uygulandı
- Worker: Özel bot imzalarına karşı edge’de filtreleme yapıldı
Sonuç olarak bot trafiği yüzde seksen azaldı, sunucu maliyetleri düştü ve rakip siteler artık gerçek zamanlı fiyat bilgisine ulaşamaz hale geldi.
Scrape Shield ile Birlikte Kullanılabilecek Tamamlayıcı Önlemler
Scrape Shield tek başına yeterli olmayabilir. Şu ek önlemlerle korumayı güçlendirebilirsiniz:
- Turnstile (CAPTCHA): Cloudflare’in kendi CAPTCHA çözümü, şüpheli trafiği doğrulama adımına yönlendirir
- Bot Fight Mode: Cloudflare Pro planında gelen bu özellik, bot parmak izlerini analiz eder
- Honeypot linkleri: CSS ile gizlenmiş ama botlara görünür linkler ekleyerek scraper’ları tespit edebilirsiniz
- Dinamik içerik: Fiyat gibi kritik bilgileri JavaScript ile render ederek basit HTML scraper’larını etkisiz kılabilirsiniz
- Watermarking: Görsellerinize görünmez dijital filigran ekleyerek kaynak takibi yapabilirsiniz
Sorun Giderme
Scrape Shield aktifken bazı meşru hizmetler engellenebilir. En sık karşılaşılan sorunlar ve çözümleri:
- SEO araçları engelleniyor: Google Search Console, Ahrefs, SEMrush gibi araçlar için WAF bypass kuralları oluşturun
- Ortaklık ağları görsellere erişemiyor: Ortaklık ağı domain’lerini hotlink whitelist’ine ekleyin
- Sosyal medya önizlemeleri bozuluyor: Facebookexternalhit, Twitterbot gibi user-agent’ları izin listesine alın
- CDN sync sorunları: Downstream CDN IP aralıklarını güvenilir kaynak olarak tanımlayın
# Cloudflare IP listesini kontrol etme (bypass için kullanılabilir)
curl https://www.cloudflare.com/ips-v4
curl https://www.cloudflare.com/ips-v6
Sonuç
Cloudflare Scrape Shield, özellikle görsel içerik ve telif hakkıyla korunan materyallere sahip siteler için vazgeçilmez bir koruma katmanı sunuyor. Ücretsiz planda bile e-posta gizleme, SSE ve hotlink koruması gibi temel özelliklere erişebiliyorsunuz.
Ancak şunu net söylemek gerekiyor: Hiçbir çözüm yüzde yüz koruma sağlamıyor. Kararlı ve teknoloji sahibi bir bot operatörü bu engelleri er ya da geç aşabilir. Buradaki amaç, maliyeti artırarak caydırıcılık oluşturmak ve düşük bütçeli, otomatik saldırıların büyük çoğunluğunu engellemek.
En etkili yaklaşım katmanlı savunmadır: Cloudflare Scrape Shield temel korumayı sağlar, WAF kuralları ve rate limiting orta seviye tehditleri engeller, Cloudflare Workers ise özel mantığınızı edge’de çalıştırmanıza olanak tanır. Buna ek olarak uygulama seviyesinde alacağınız önlemler, yani dinamik içerik rendering ve honeypot teknikleri, en inatçı scraper’ları bile zorlar.
Düzenli olarak Cloudflare Analytics verilerini inceleyin, yeni bot imzalarını tespit edin ve kurallarınızı güncelleyin. İçerik koruma statik bir iş değil, sürekli evrim gerektiren dinamik bir süreçtir.
