Kebijakan asal yang sama
Dalam bahasa pemrograman sisi klien, seperti JavaScript dan ActionScript, kebijakan asal yang sama merupakan konsep keamanan yang sangat penting, yang sangat penting dalam memastikan keamanan data. Kebijakan asal yang sama menetapkan bahwa skrip lintas domain diisolasi. Skrip dalam satu domain tidak dapat mengakses dan mengoperasikan sebagian besar properti dan metode domain lain. Lalu apa itu domain yang sama dan apa itu domain yang berbeda? Jika dua domain memiliki protokol yang sama (misalnya http), port yang sama (misalnya 80), dan host yang sama (misalnya www.example.org), maka kita dapat menganggapnya sebagai domain yang sama. Misalnya, http://www.example.org/index.html dan http://www.example.org/sub/index.html berada dalam domain yang sama, sedangkan http://www.example.org, https ://www Dua dari .example.org, http://www.example.org:8080, http://sub.example.org akan merupakan lintas-domain. Kebijakan asal yang sama juga harus menangani beberapa situasi khusus, seperti membatasi izin akses skrip di bawah protokol file. File HTML lokal dibuka di browser melalui protokol file. Jika skrip dapat mengakses file lain di hard disk melalui protokol file, risiko keamanan akan muncul.
Dipengaruhi oleh kebijakan asal yang sama, pembagian sumber daya lintas domain akan dibatasi. Namun, dengan praktik masyarakat dan kemajuan browser, saat ini terdapat banyak pengalaman berharga yang terakumulasi dan terakumulasi dalam keterampilan permintaan lintas domain. Di sini saya membagi berbagi sumber daya lintas domain menjadi dua jenis, satu adalah permintaan data satu arah, dan yang lainnya adalah komunikasi pesan dua arah. Selanjutnya, saya akan mencantumkan beberapa metode lintas domain yang umum. Kode sumber untuk contoh lintas domain berikut dapat diperoleh di sini .
Lintas domain satu arah
JSONP
JSONP (JSON dengan Padding) adalah metode lintas domain yang sederhana dan efisien. Tag skrip dalam HTML dapat memuat dan mengeksekusi JavaScript dari domain lain, sehingga kita dapat memuat sumber daya dari domain lain secara dinamis melalui tag skrip. Misalnya saya ingin memuat data domain B dari halaman halamanA domain A, maka di halaman halamanB domain B, saya mendeklarasikan data yang dibutuhkan halamanA dalam bentuk JavaScript, lalu menggunakan tag script di halamanA untuk memuat halamanB, maka di halamanB skrip akan dieksekusi. JSONP menambahkan fungsi panggilan balik atas dasar ini. Setelah halamanB dimuat, fungsi yang ditentukan di halamanA akan dijalankan, dan data yang diperlukan akan diteruskan ke fungsi dalam bentuk parameter. JSONP mudah diterapkan, namun ada juga beberapa risiko keamanan. Jika skrip pihak ketiga dijalankan sesuka hati, skrip tersebut dapat merusak konten halaman dan mencegat data sensitif. Namun saat mentransfer data antar pihak terpercaya, JSONP adalah pilihan yang sangat cocok.
Pemuat URL Flash
Flash memiliki kebijakan keamanannya sendiri. Server dapat menggunakan file crossdomain.xml untuk mendeklarasikan file SWF domain mana yang dapat diakses. SWF juga dapat menggunakan API untuk menentukan domain mana yang dapat memuatnya. Saat mengakses sumber daya lintas domain, seperti meminta data di domain www.b.com dari domain www.a.com, kita dapat menggunakan Flash untuk mengirim permintaan HTTP. Pertama, modifikasi crossdomain.xml pada domain www.b.com (biasanya disimpan di direktori root, jika tidak perlu membuatnya secara manual), tambahkan www.a.com ke whitelist. Kedua, permintaan HTTP dikirim melalui Flash URLLoader, dan terakhir, hasil respons diteruskan ke JavaScript melalui Flash API. Flash URLLoader adalah solusi lintas domain yang sangat umum, tetapi jika perlu mendukung iOS, solusi ini tidak dapat berbuat apa-apa.
Kontrol Akses
Kontrol Akses adalah metode lintas domain yang lebih transenden. Saat ini hanya didukung di beberapa browser. Browser ini dapat mengirimkan permintaan HTTP lintas domain (Firefox, Google Chrome, dll. diimplementasikan melalui XMLHTTPRequest, dan IE8 diimplementasikan melalui XDomainRequest. ). Respons terhadap permintaan harus menyertakan header respons HTTP Access-Control-Allow-Origin, yang menyatakan aksesibilitas domain yang diminta. Misalnya, www.a.com mengirimkan permintaan HTTP lintas domain ke aset.php di bawah www.b.com , maka aset.php harus menambahkan header respons berikut:
header("Access-Control-Allow-Origin: http://www.a.com");