Same-Origin Policy
Aynı Kaynak Politikası
- Türkçe karşılığı
- aynı köken politikası
- Okunuşu
- seym oricin polısi
Günlük kullanımda çoğunlukla İngilizcesi tercih edilir.
Kısaca
Same-origin policy, bir sitedeki betiklerin, o site açıkça izin vermedikçe başka bir sitedeki verileri okumasını engelleyen tarayıcı güvenlik kuralıdır.
Same-origin policy nedir?
Same-origin policy, tarayıcının temel yalıtım kuralıdır. Bir web sayfasının kendi origin'inden gelen kaynaklarla serbestçe etkileşime girmesine izin verir, ancak sayfanın betiklerinin diğer origin'lere ait yanıtları, sayfaları veya depolamayı okumasını engeller. Bu kural olmasaydı ziyaret ettiğiniz herhangi bir web sitesi, tarayıcınızı ve çerezlerinizi kullanarak diğer sitelerdeki e-postanızı veya banka bakiyenizi okuyabilirdi.
Origin, https://app.example.com:443 örneğindeki gibi şema (scheme), host ve portun birleşimidir. İki URL'nin aynı origin'e sahip olması için üçünün de eşleşmesi gerekir; bu yüzden http://example.com ile https://example.com farklı origin'lerdir, example.com ile api.example.com da öyle. Politika çoğunlukla göndermeyi değil, okumayı kısıtlar: bir sayfa yine de diğer origin'lerden görselleri, betikleri ve iframe'leri gömebilir ve onlara form gönderebilir, ancak JavaScript'i cross-origin bir fetch yanıtını, cross-origin bir iframe'in DOM'unu veya başka bir origin'in çerezlerini ve yerel depolamasını okuyamaz.
Bir apartman girişindeki posta kutuları gibidir: herkes herhangi bir kutuya mektup atabilir, ancak yalnızca anahtarı olan sakin kutuyu açıp içindekini okuyabilir. Kuralı gevşetmenin kontrollü yolları vardır: cross-origin fetch istekleri için CORS ve pencereler ile iframe'ler arasındaki iletişim için postMessage gibi. Okumaya odaklanması, başka savunmalara neden hâlâ ihtiyaç duyulduğunu da açıklar: siteler arası istekler yine gönderilebilir, bu yüzden CSRF mümkün kalır ve çerçeveleme varsayılan olarak serbesttir, bu yüzden clickjacking'in kendi koruması gerekir.
Same-origin policy sıklıkla CORS ile karıştırılır. Same-origin policy tarayıcılara yerleşik varsayılan kısıtlamadır; CORS ise bir sunucunun Access-Control-Allow-Origin gibi başlıklar göndererek bu kısıtlamayı gevşetmesini sağlayan bir mekanizmadır. Dolayısıyla bir CORS hatası, politikanın tasarlandığı gibi çalıştığı anlamına gelir. İkisi de yalnızca tarayıcılar tarafından uygulanır; bu da onları bir API'yi doğrudan çağıran betiklere veya sunuculara karşı korumadığı anlamına gelir.
Önemli noktalar
- Same-origin policy, bir origin'deki betiklerin başka bir origin'deki verileri okumasını engeller.
- Origin; şema, host ve portun birleşimidir.
- Cross-origin göndermeye ve gömmeye çoğunlukla izin verilir; sonuçları okumak engellenir.
- CORS ve
postMessage, politikayı gevşetmenin standart ve kontrollü yollarıdır. - Tarayıcılar tarafından uygulanır ve sunucu taraflı yetkilendirmenin yerini tutmaz.
Örnek
// This page runs on https://shop.example.com
await fetch("/api/cart"); // same origin: allowed
// A different host is a different origin: reading the response is blocked
// unless api.other.com replies with a matching CORS header
await fetch("https://api.other.com/data");
// All of these are different origins from https://shop.example.com:
// http://shop.example.com (different scheme)
// https://www.example.com (different host)
// https://shop.example.com:8443 (different port)Sık sorulan sorular
Aynı origin ne sayılır?
İki URL'nin şeması, host'u ve portu birebir aynıysa aynı origin'i paylaşır. https://example.com/a ve https://example.com/b aynı origin'dir; https://example.com ve https://api.example.com ise değildir.
Same-origin policy ile CORS arasındaki fark nedir?
Same-origin policy, betiklerin cross-origin yanıtları okumasını engelleyen tarayıcının varsayılan kuralıdır. CORS ise bir sunucunun belirli başka origin'lerin yanıtlarını okumasına izin vermek için kullandığı, isteğe bağlı bir mekanizmadır.
Same-origin policy CSRF'i önler mi?
Hayır. Saldırganın sayfasının yanıtı okumasını engeller, ancak tarayıcı siteler arası isteği yine, çoğu zaman kullanıcının çerezleriyle gönderir. CSRF koruması, sunucuda token'lar, SameSite çerezleri veya origin denetimleri gerektirir.
İlgili sayfalar
- CORSWeb Geliştirme, s. 9CORS, bir sunucunun JavaScript'ten istek yapan hangi diğer sitelerin yanıtlarını okuyabileceğini bildirmesini sağlayan tarayıcı güvenlik mekanizmasıdır.
- CSRFGüvenlik, s. 5CSRF, oturum açmış kullanıcının tarayıcısını güvenilir bir siteye istenmeyen istek göndermeye kandıran, sitenin de gerçek kullanıcı eylemi sandığı saldırıdır.
- ClickjackingGüvenlik, s. 3Clickjacking, meşru bir siteyi kötü amaçlı bir sayfada görünmez bir çerçeveye gizleyerek kullanıcıları göremedikleri düğmelere tıklamaya kandıran saldırıdır.
- CookieWeb Geliştirme, s. 7Cookie, bir web sitesinin tarayıcıdan saklamasını ve sonraki isteklerle geri göndermesini istediği, çoğunlukla oturum açık tutmak için kullanılan küçük veridir.
- iframeWeb Geliştirme, s. 24iframe, başka bir web sayfasını mevcut sayfaya gömen ve sıkça videolar, haritalar, ödeme formları ve üçüncü taraf widget'lar için kullanılan HTML öğesidir.
- URLWeb Geliştirme, s. 53URL, web'deki bir kaynağın adresidir; şema, sunucu adı, yol ve sorgu dizesi gibi bölümlerden oluşur ve tarayıcıya kaynağın nereden, nasıl alınacağını söyler.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin