SSRF (Server-Side Request Forgery) nedir? Bir "URL'den önizleme oluştur" özelliğini nasıl güvenli yaparsınız?
Cevap
SSRF, saldırganın sunucunuzu kendi adına istek atmaya zorlamasıdır. Sunucu iç ağın içinde olduğu için saldırgan dışarıdan erişemediği servislere ulaşabilir: bulut metadata servisi (169.254.169.254), iç admin panelleri, Redis, veritabanları.
Klasik senaryo: kullanıcının verdiği URL'nin başlığını ve görselini çeken link önizleme, "URL'den görsel yükle" veya webhook test butonu.
// Tehlikeli: kullanıcı url = "http://169.254.169.254/latest/meta-data/iam/..." verebilir
const html = await fetch(req.body.url).then((r) => r.text());Savunma
- Sadece `http`/`https` şemasına izin verin (
file://,gopher://vb. reddedin). - Host adını çözümleyip IP'yi kontrol edin: private (10/8, 172.16/12, 192.168/16), loopback (127/8, ::1), link-local (169.254/16) ve IPv6 karşılıklarını reddedin.
- DNS rebinding'e karşı: kontrol ettiğiniz IP ile bağlandığınız IP aynı olmalı. Çözümlenen IP'ye bağlanın veya HTTP client'ın bağlantı anında kontrol yapmasını sağlayın.
- Yönlendirmeleri otomatik takip etmeyin ya da her yönlendirmede kontrolü tekrarlayın (dış URL, iç adrese 302 verebilir).
- Zaman aşımı, yanıt boyutu limiti koyun; yanıtın ham hâlini kullanıcıya geri döndürmeyin.
- Ağ seviyesinde izolasyon: bu işi yapan worker'ı iç ağa erişimi olmayan ayrı bir ortamda veya egress proxy arkasında çalıştırın.
- Bulut tarafı: AWS'de IMDSv2'yi zorunlu yapın (token gerektirir, basit GET ile metadata çalınamaz).
import dns from "node:dns/promises";
import ipaddr from "ipaddr.js";
async function assertPublicUrl(raw) {
const url = new URL(raw);
if (!["http:", "https:"].includes(url.protocol)) throw new Error("şema");
const { address } = await dns.lookup(url.hostname);
if (ipaddr.parse(address).range() !== "unicast") throw new Error("iç adres");
return { url, address }; // bağlantıyı bu IP'ye yapın
}Beyaz liste (sadece belirli alan adlarına izin) mümkünse kara listeden her zaman daha güvenlidir.
İlgili Web Güvenliği soruları
- CORS nedir? Neden CORS hatası alırız?
- XSS ve CSRF saldırıları nedir, nasıl korunulur?
- Authentication ile authorization arasındaki fark nedir?
- Güvenli cookie ayarları nelerdir? Session hijacking nasıl önlenir?
- Content Security Policy (CSP) nedir ve nasıl yapılandırılır?
- OWASP Top 10 nedir? En önemli maddelerini özetleyin.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.