Same-Origin Policy, web tarayıcılarının temel güvenlik mekanizmasıdır. Bir origin'den gelen script'lerin başka bir origin'deki verilere erişimini kısıtlar ve web sitelerinin birbirlerine saldırmasını engellemeyi amaçlar.
Örnek:
http://normal-website.com/example/example.html
- Scheme: http
- Domain: normal-website.com
- Port: 80 (default)
// Same-Origin Policy Kontrol Tablosu
// Ana URL: http://normal-website.com/example/example.html
✅ http://normal-website.com/example/ // Aynı scheme, domain, port
✅ http://normal-website.com/example2/ // Aynı scheme, domain, port
❌ https://normal-website.com/example/ // Farklı scheme ve port
❌ http://en.normal-website.com/example/ // Farklı domain
❌ http://www.normal-website.com/example/ // Farklı domain
❌ http://normal-website.com:8080/example/ // Farklı port
SOP olmadan, kötü amaçlı bir web sitesi ziyaret ettiğinizde Gmail e-postalarınızı, Facebook mesajlarınızı ve diğer kişisel verilerinizi okuyabilir. SOP, authentication cookie'leri dahil olmak üzere cross-origin isteklerde gönderilen tüm cookie'leri kontrol eder.
İzin Verilen: <img>, <video>, <script> tag'leri ile kaynak yükleme
Kısıtlanan: JavaScript'in bu kaynakların içeriğini okumas
// SOP İstisnaları:
// 1. Yazılabilir ama okunamaz objeler
window.location.href = "https://other-site.com"; // ✅ İzin verilen
var url = iframe.contentWindow.location.href; // ❌ Engellenen
// 2. Okunabilir ama yazılamaz objeler
var frameCount = window.length; // ✅ Frame sayısı okunabilir
var isClosed = window.closed; // ✅ Window durumu okunabilir
// 3. Cross-domain fonksiyon çağrıları
otherWindow.close(); // ✅ İzin verilen
otherWindow.blur(); // ✅ İzin verilen
otherWindow.focus(); // ✅ İzin verilen
otherWindow.postMessage("data", "*"); // ✅ Cross-origin mesajlaşma
// 4. Cookie gevşekliği - subdomain erişimi
// Cookie'ler teknik olarak farklı origin'ler olsa da subdomain'ler arasında erişilebilir
document.domain özelliği kullanarak aynı FQDN altındaki domain'ler arası erişim sağlanabilir. Ancak bu güvenlik riski oluşturabilir ve modern tarayıcılarda kısıtlanmıştır.