CSRF'yi derinlemesine anlamak
Cross-Site Request Forgery (CSRF) saldırılarına ilişkin derinlemesine bir araştırma sunar, mekaniklerini açıklar, örnekler gösterir ve web uygulaması güvenliğini artırmak için çeşitli önleme yöntemlerini detaylandırır.
Web geliştirme üzerinde çalışırken, özellikle çerezlerle, sık sık "bu ayar CSRF'yi önlemeye yardımcı olur" gibi ifadeler duyuyoruz. Ancak, birçok kişi "CSRF"nin gerçekten ne anlama geldiği konusunda sadece belirsiz bir fikre sahiptir.
Bugün, yaygın bir web güvenlik açığı olan CSRF (Cross-Site Request Forgery)'yi derinlemesine inceleyeceğiz. Bu, CSRF ile ilgili sorunları daha etkili bir şekilde ele almamıza yardımcı olacak.
CSRF nedir?
CSRF (Cross-Site Request Forgery), saldırganların kimliği doğrulanmış kullanıcıları, istenmeyen eylemleri gerçekleştirmeleri için kandırdığı bir tür web saldırısıdır. Basit terimlerle, bu, "hackerlerin, yetkisiz eylemler gerçekleştirmek için kullanıcı gibi davranmaları"dır.
CSRF nasıl çalışır?
CSRF'yi anlamak için birkaç temel kavramı kavramamız gerekiyor:
Tarayıcının Aynı Köken politikası
Aynı köken politikası, bir belgenin veya betiğin bir kökenden diğer kökene kaynaklarla nasıl etkileşime girebileceğini sınırlayan tarayıcıdaki bir güvenlik özelliğidir.
Bir köken, bir protokol (HTTP veya HTTPS gibi), alan adı ve bağlantı noktası numarasından oluşur. Örneğin, https://example.com:443
bir kökendir, https://demo.com:80
ise başka bir kökendir.
Aynı köken politikası, farklı kökenlerden sayfalar arasında veri erişimini kısıtlar, yani:
- Bir kökenin JavaScript'i başka bir kökenin DOM'unu okuyamaz
- Bir kökenin JavaScript'i başka bir kökenin Çerezini, IndexedDB'sini veya localStorage'unu okuyamaz
- Bir kökenin JavaScript'i başka bir kökene AJAX istekleri gönderemez (CORS kullanılmadıkça)
Ancak, Web'in açıklığı ve birlikte çalışabilirliğini korumak için (CDN'lerden kaynak yüklemek veya üçüncü taraf API'larına istek göndermek gibi), aynı köken politikası çapraz köken ağ isteklerini sınırlamaz:
- Sayfalar herhangi bir kökene GET veya POST istekleri gönderebilir (resim yüklemek veya formlar göndermek gibi)
- Herhangi bir kökenden kaynaklar içe aktarılabilir (
<script>
,<img>
,<link>
,<iframe>
etiketleri gibi)
Otomatik çerez gönderme mekanizması
Otomatik çerez gönderme mekanizması, tarayıcıların önemli bir özelliğidir. Bir tarayıcı bir etki alanına bir istek gönderdiğinde, otomatik olarak o etki alanının tüm çerezlerini ekler. Bu işlem otomatik olup, herhangi bir JavaScript kodu veya kullanıcı etkileşimi gerektirmez.
Bu mekanizma, web sitelerinin kullanıcıların oturum açma durumlarını kolayca hatırlamasına olanak tanır çünkü her istek otomatik olarak kullanıcının kimlik bilgilerini taşır.
Kalın
Örneğin, bir bankanın web sitesine (bank.com
) giriş yaptığınızda bir kimlik çerezi alırsınız ve ardından hesabınızı görüntülemek için tıkladığınızda, tarayıcı otomatik olarak bank.com
ile eşleşen tüm çerezleri bulur ve bu isteğe ekler. Bankanın sunucusu bu sayede backend'den sizi tanımlayabilir ve hesap bilgilerinizi döndürebilir.