Saya melakukan panggilan ajax ke server saya sendiri pada platform yang mereka tetapkan untuk mencegah panggilan ajax ini (tapi saya membutuhkannya untuk mengambil data dari server saya untuk menampilkan data yang diambil dari database server saya). Skrip ajax saya berfungsi, ia dapat mengirim data ke skrip php server saya untuk memungkinkannya diproses. Namun itu tidak bisa mendapatkan kembali data yang diproses karena diblokir oleh"Access-Control-Allow-Origin"
Saya tidak memiliki akses ke sumber / inti platform itu. jadi saya tidak bisa menghapus skrip yang melarang saya melakukannya. (P / SI menggunakan Google Chrome's Console dan menemukan kesalahan ini)
Kode Ajax seperti yang ditunjukkan di bawah ini:
$.ajax({
type: "GET",
url: "http://example.com/retrieve.php",
data: "id=" + id + "&url=" + url,
dataType: 'json',
cache: false,
success: function(data)
{
var friend = data[1];
var blog = data[2];
$('#user').html("<b>Friends: </b>"+friend+"<b><br> Blogs: </b>"+blog);
}
});
atau adakah JSON
kode yang setara dengan skrip ajax di atas? Saya pikir JSON
diperbolehkan.
Saya harap seseorang bisa membantu saya.
Jawaban:
Letakkan ini di atas recoverve.php:
Perhatikan bahwa ini secara efektif menonaktifkan perlindungan CORS, dan membuat pengguna Anda rentan terhadap serangan. Jika Anda tidak sepenuhnya yakin bahwa Anda harus mengizinkan semua asal, Anda harus mengunci ini ke asal yang lebih spesifik:
Silakan merujuk ke jawaban tumpukan berikut untuk pemahaman lebih baik
Access-Control-Allow-Origin
https://stackoverflow.com/a/10636765/413670
sumber
Oke, tetapi Anda semua tahu bahwa * adalah wildcard dan memungkinkan skrip lintas situs dari setiap domain?
Anda ingin mengirim beberapa
Access-Control-Allow-Origin
tajuk untuk setiap situs yang diizinkan - tetapi sayangnya secara resmi tidak didukung untuk mengirimAccess-Control-Allow-Origin
tajuk ganda , atau memasukkan banyak asal.Anda dapat menyelesaikan ini dengan memeriksa asal, dan mengirim kembali yang di header, jika diizinkan:
Itu jauh lebih aman. Anda mungkin ingin mengedit yang cocok dan mengubahnya ke fungsi manual dengan beberapa regex, atau sesuatu seperti itu. Setidaknya ini hanya akan mengirim kembali 1 header, dan Anda akan yakin itu salah satu yang berasal dari permintaan. Harap perhatikan bahwa semua tajuk HTTP bisa dipalsukan, tetapi tajuk ini untuk perlindungan klien. Jangan lindungi data Anda sendiri dengan nilai-nilai itu. Jika Anda ingin tahu lebih banyak, bacalah sedikit tentang CORS dan CSRF.
Kenapa lebih aman?
Mengizinkan akses dari lokasi lain maka situs tepercaya Anda sendiri memungkinkan untuk melakukan highjacking sesi. Saya akan menggunakan sedikit contoh - gambar Facebook memungkinkan asal wildcard - ini berarti Anda dapat membuat situs web Anda sendiri di suatu tempat, dan menjadikannya memecat panggilan AJAX (atau buka iframe) ke facebook. Ini berarti Anda dapat mengambil info masuk dari facebook dari pengunjung situs web Anda. Lebih buruk lagi - Anda dapat membuat skrip
POST
permintaan dan mengirim data di Facebook seseorang - tepat saat mereka meramban situs web Anda.Berhati-hatilah saat menggunakan
ACAO
header!sumber
header()
mengganti header sebelumnya dari jenis yang sama. Jadi sebenarnya yang Anda lakukan adalah mengatur tajuk terakhir. The pengguna entri menyatakan bahwa Anda dapat mengatur parameter keduafalse
untuk mencegah header sebelumnya menjadi ditimpa.Peringatan , Chrome (dan browser lain) akan mengeluh bahwa beberapa header ACAO disetel jika Anda mengikuti beberapa jawaban lainnya.
Kesalahannya akan seperti
XMLHttpRequest cannot load ____. The 'Access-Control-Allow-Origin' header contains multiple values '____, ____, ____', but only one is allowed. Origin '____' is therefore not allowed access.
Coba ini:
sumber
Saya telah memperbaiki masalah ini saat memanggil Kontroler MVC3. Saya tambahkan:
sebelum saya
Dan saya juga
$.ajax
mengeluh bahwa itu tidak menerima header tipe-konten dalam panggilan ajax saya, jadi saya berkomentar karena saya tahu JSON-nya dilewatkan ke Action.Semoga itu bisa membantu.
sumber
Ini adalah ide yang sangat buruk untuk digunakan
*
, yang membuat Anda terbuka lebar untuk cross scripting situs. Pada dasarnya Anda ingin domain Anda sendiri sepanjang waktu, mencakup pengaturan SSL Anda saat ini, dan opsional domain tambahan. Anda juga ingin semuanya dikirim sebagai satu tajuk. Berikut ini akan selalu mengesahkan domain Anda sendiri dalam lingkup SSL yang sama dengan halaman saat ini, dan secara opsional juga dapat menyertakan sejumlah domain tambahan. Ini akan mengirim mereka semua sebagai satu tajuk, dan menimpa yang sebelumnya jika ada sesuatu yang sudah dikirim mereka untuk menghindari kemungkinan browser menggerutu tentang beberapa tajuk kontrol akses yang dikirim.Pemakaian:
Anda mendapatkan idenya.
sumber
Sudahkah Anda mencoba menambahkan tajuk Akses-Kontrol-Bolehkan-Asal ke respons yang dikirim dari server Anda? Seperti
Access-Control-Allow-Origin: *
,?sumber