The document.domain
metode
Perhatikan bahwa ini adalah metode iframe yang menetapkan nilai document.domain ke sufiks domain saat ini. Jika melakukannya, domain yang lebih pendek digunakan untuk pemeriksaan asal berikutnya. Misalnya, asumsikan skrip dalam dokumen di http://store.company.com/dir/other.html
jalankan pernyataan berikut:
document.domain = "company.com";
Setelah pernyataan itu dieksekusi, halaman akan melewati pemeriksaan asal dengan http://company.com/dir/page.html
. Namun, dengan alasan yang sama, company.com tidak dapat diatur document.domain
ke othercompany.com
.
Dengan metode ini, Anda akan diizinkan untuk mengeksekusi javascript dari iframe yang bersumber pada subdomain pada halaman yang bersumber pada domain utama. Metode ini tidak cocok untuk sumber daya lintas-domain karena browser seperti Firefox tidak akan memungkinkan Anda untuk mengubah document.domain
ke domain yang sepenuhnya asing.
Sumber: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript
Metode Berbagi Sumber Daya Silang-Asal
Cross-Origin Resource Sharing (CORS) adalah W3C Working Draft yang mendefinisikan bagaimana browser dan server harus berkomunikasi ketika mengakses sumber di seluruh asal. Gagasan dasar di balik CORS adalah menggunakan header HTTP khusus untuk memungkinkan browser dan server mengetahui cukup banyak tentang satu sama lain untuk menentukan apakah permintaan atau respons harus berhasil atau gagal.
Untuk permintaan sederhana, permintaan yang menggunakan salah satu GET
atau POST
tanpa tajuk khusus dan yang badannya adalah text/plain
, permintaan dikirim dengan tajuk tambahan yang disebut Origin
. Header Asal berisi asal (protokol, nama domain, dan port) dari halaman yang meminta sehingga server dapat dengan mudah menentukan apakah harus melayani respons atau tidak. Contoh Origin
tajuk mungkin terlihat seperti ini:
Origin: http://www.stackoverflow.com
Jika server memutuskan bahwa permintaan harus diizinkan, ia mengirim Access-Control-Allow-Origin
header yang menggemakan asal yang sama dengan yang dikirim atau *
jika itu adalah sumber daya publik. Sebagai contoh:
Access-Control-Allow-Origin: http://www.stackoverflow.com
Jika tajuk ini tidak ada, atau asal-usulnya tidak cocok, maka peramban tidak mengizinkannya. Jika semuanya baik-baik saja, maka browser memproses permintaan. Perhatikan bahwa baik permintaan maupun respons tidak menyertakan informasi cookie.
Tim Mozilla menyarankan dalam posting mereka tentang CORS bahwa Anda harus memeriksa keberadaan withCredentials
properti untuk menentukan apakah browser mendukung CORS melalui XHR. Anda kemudian dapat berpasangan dengan keberadaan XDomainRequest
objek untuk menutupi semua browser:
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var request = createCORSRequest("get", "http://www.stackoverflow.com/");
if (request){
request.onload = function() {
// ...
};
request.onreadystatechange = handler;
request.send();
}
Perhatikan bahwa agar metode CORS berfungsi, Anda harus memiliki akses ke semua jenis mekanisme header server dan tidak bisa begitu saja mengakses sumber daya pihak ketiga.
Sumber: http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
The window.postMessage
metode
window.postMessage
, ketika dipanggil, menyebabkan a MessageEvent
untuk dikirim di jendela target ketika skrip yang tertunda yang harus dieksekusi selesai (misalnya penangan peristiwa yang tersisa jika window.postMessage
dipanggil dari penangan peristiwa, batas waktu pending yang ditetapkan sebelumnya, dll.). The MessageEvent
memiliki pesan jenis, sebuah data
properti yang diatur ke nilai string dari argumen pertama yang diberikan kepada window.postMessage
, sebuah origin
properti yang sesuai dengan asal-usul dokumen utama di jendela menelepon window.postMessage
pada waktu itu window.postMessage
disebut, dan source
properti yang jendela dari yangwindow.postMessage
disebut.
Untuk menggunakan window.postMessage
, pendengar acara harus dilampirkan:
// Internet Explorer
window.attachEvent('onmessage',receiveMessage);
// Opera/Mozilla/Webkit
window.addEventListener("message", receiveMessage, false);
Dan suatu receiveMessage
fungsi harus dinyatakan:
function receiveMessage(event)
{
// do something with event.data;
}
Iframe luar-situs juga harus mengirim acara dengan benar melalui postMessage
:
<script>window.parent.postMessage('foo','*')</script>
Jendela apa pun dapat mengakses metode ini di jendela lain, kapan saja, apa pun lokasi dokumen di jendela itu, untuk mengirimkannya pesan. Akibatnya, pendengar acara apa pun yang digunakan untuk menerima pesan harus terlebih dahulu memeriksa identitas pengirim pesan, menggunakan asal dan kemungkinan sumber properti. Ini tidak dapat dikecilkan: Kegagalan untuk memeriksa origin
dan mungkinsource
properti memungkinkan serangan skrip lintas situs.
Sumber: https://developer.mozilla.org/en/DOM/window.postMessage