2. SOP NEDIR?
• SOP (same origin policy), tarayıcı üzerinde çalışan iki originin
birbirleri arasında iletişim kurup kuramayacağını belirleyen
politikadır.
3. ORIGIN NEDIR?
• Kaynağa ulaşım sağlanırken kullanılan protokol, URL ve erişilen
port bilgisi birleşiminden oluşan tanıma origin adı verilir.
• Protokol: “http://“
• Url: “www.enuygun.com”
• Port: 80
4. IKI ORIGIN ARASINDAKI KURALLAR
• http://www.example.com/dir/page.html url’ing sahip bir web sitemiz olduğunu
düşünerek, sahip olduğumuz originden hangi urllere istek gönderebileceğimizi
inceleyelim.
5. IKI ORIGIN ARASINDAKI KURALLAR
• A originine sahip olan bir site;
• B origininden bir script yükleyip çalıştırabilir.
• Yüklenen scriptin kaynak koduna veya sade (raw) haline erişim sağlayamaz.
• B origininden CSS yükleyebilir.
• B origini üzerindeki CSS dosyasının sade (raw) haline ulaşamaz.
• B originindeki bir siteyi IFRAME ile yükleyebilir.
• IFRAME ile yüklenmiş B originindeki sitenin DOM ‘una erişemez.
• B origininden bir resim yükleyebilir.
• B origininden yüklenmiş bir resimin bitlerine erişemez.
• B origininden bir video oynayabilir.
• B origininden oynatılan videonun resimini çekemez.
7. WEB 2.0 VE YENILIKLER
• Web 2.0 ile kullanıcı haraketlerini temel alan siteler üretilmeye
başlandı. Bu interaktif siteler kendi içerilerinde cross domain
süreçler başlatmak istediklerinde ise SOP’un katı kurallarına
takıldılar. Bundan dolayı bu kurallara bazı esneklikler ve yenilikler
kazandırma ihtiyacı doğdu. İşte bunlardan bazıları;
• XmlHTTPRequest
• JSONP
8. XMLHTTPREQUEST
• Bir kaynağa asenkron şekilde istek atıp yanıt almaya yarar.
• X-Requested-With başlığı isteğe eklenerek gönderilir.
X-Requested-With: XmlHTTPRequest
• SOP kuralları katı bir şekilde uygulanır.
9. XMLHTTPREQUEST & SOP
• Aynı origine sahip isteklerin cevapları okunabilir.
• Aynı origin’e sahip isteklere extra başlıklar (header) eklenebilir.
• Farklı bir origin’e istek yapılabilir ancak cevap okunamaz. (CSRF)
10. JSONP
• Farklı veya aynı originlere asenkron bir şekilde istek atıp yanıt
almaya olanak sağlar.
• Yanıt (response) bir script’tir. Bu script sizin url’de gönderdiğiniz
methodu çağırır.
• Yalnızca GET methodu ile çalışır.
12. JSONP VE HTTPS
• JSONP ile ilişkili olan tehlike ise; yüklenilen scripti direk olarak
tarayıcının çalıştırıyor olması. Eğer giriş yaptığınız web sitesi https
değil de http olursa, giden/gelen verinin bozulup bozulmadığına
emin olamayacağınızdan dolayı ağ katmanınızdan kaynaklı olarak
bir güvenlik açığına sebebiyet verebilirsiniz.
13. XDOMAINREQUEST AND CORS
• JSONP kullanarak GET methodu ile veri çekebilmiştik fakat veri
yazma / silme / güncelleme işlerini de aynı anda yönetebilmemiz
gerekiyor.
• Bu konudaki baskılardan dolayı ilk adım olarak Microsoft
XDomainRequest adlı bir yapı tanıtır. Diğer büyük tarayıcılar ise
CORS’u (Cross origin resource sharing) tanıtırlar.
• SOP sınırlamalarına ek olarak bu iki yapı ile istek kısıtlama
yönetimi domain’e de verilmiş oldu.
15. SIMPLE REQUEST
• Koşullar;
• HTTP methodu GET, HEAD veya POST ise
• Content-Type başlığı (header) application/x-www-form-urlencoded,
multipart/form-data veya text/plain ise
• Fazladan başlık (header) gönderilmemiş ise
• CORS mekanizması bunu simple request olarak değerlendirecek ve
isteği direk yönlendirecektir.
17. PREFLIGHTED REQUEST
• Koşullar;
• Http methodu GET, HEAD veya POST dan farklı bir method ise
• Content-Type başlığı (header) application/x-www-form-
urlencoded, multipart/form-data veya text/plain dan farklı ise
• Fazladan başlık (header) gönderilmiş ise
• CORS mekanizması bunu preflighted request olarak
değerlendirecek ve ilk önce OPTIONS isteği yönlendirecektir.
Sunucu bu isteğin doğruluğu kontrol edip ilgili başlıkları (header)
gönderdikten sonra tarayıcı gerçek isteği gönderecektir.
20. ORIGIN
• Kaynağa ulaşım sağlanırken kullanılan protokol, URL ve erişilen
port bilgisi birleşiminden oluşan tanıma origin adı verilir.
• Protokol: “http://“
• Url: “www.enuygun.com”
• Port: 80
23. ACCESS-CONTROL-ALLOW-ORIGIN
• Sunucu istemciye bu başlık (header) ile hangi origin’e izin verildiğini
gönderir.
• Tam url yazılabildiği gibi “*” karakteri de yanıt olarak gönderilebilir.
• Örnekler:
• https://www.enuygun.com
• *
24. ACCESS-CONTROL-EXPOSE-HEADERS
• Sunucudan gelen bu başlık (header) ile istemcinin hangi başlıklara
(header)erişebileceği belirtilir.
• Örnek: Access-Control-Expose-Headers: X-My-Custom-Header, X-
Another-Custom-Header
25. ACCESS-CONTROL-MAX-AGE
• Sunucudan gelen bu başlık (header) ile istemcinin gönderdiği
preflighted requestin kaç saniye önbellekleneceği (cache) belirtilir.
• Örnek: Access-Control-Max-Age: <delta-saniye>
26. ACCESS-CONTROL-ALLOW-METHODS
• Sunucudan gelen bu başlık (header) ile istemcinin hangi metodlar
ile istek atabileceği belirtilir
• Örnek: Access-Control-Allow-Methods: <metod>[, <metod>]*
27. ACCESS-CONTROL-ALLOW-HEADERS
• Sunucudan gelen preflight yanıtındaki bu başlık (header) ile istemci
gerçek isteği (request) gönderirken hangi ekstra başlıkları (header)
gönderebileceği belirtilir.
• Örnek: Access-Control-Allow-Headers: <başlık-adı>[, <başlık-adı>]*
28. ACCESS-CONTROL-ALLOW-CREDENTIALS
• Sunucudan gelen bu başlık (header) ile istemcinin gerçek isteği
gönderirken cookielerin gönderilip gönderilmemesine karar verilir.
• Örnek: Access-Control-Allow-Credentials: true
30. CROSS SITE REQUEST FORGERY
• A origininden B originine kullanıcının izni olmadan, kullanıcı verisini
almak, çalmak için yapılan kötü niyetli bir exploit türüdür.
• Örnek: <img src=“www.abcsitesi.com/kullanicimi_sil" width="0"
height=“0">
• Çözüm:
• Her form için eşsiz (unique) bir token üretip, kullanıcının
oturumuna yazılır. Kullanıcı sunucuya isteği gönderdiğinde bu
token değeri kontrol edilir.