Katakanlah situs web Anda memiliki GetUser
metode web:
http://www.example.com/User/GetUser/32
yang mengembalikan respons JSON:
{ "Name": "John Doe" }
Jika metode ini hanya menerima permintaan POST, maka konten hanya akan dikembalikan ke browser jika permintaan AJAX dibuat untuk http://www.example.com/User/GetUser/32
menggunakan metode POST. Perhatikan bahwa kecuali Anda telah menerapkan CORS , browser akan melindungi data dari domain lain yang membuat permintaan ini kepada Anda.
Namun, jika Anda mengizinkan permintaan GET dan juga membuat permintaan AJAX yang serupa dengan yang di atas dengan GET, bukan POST, pengguna yang berniat jahat dapat menyertakan JSON Anda dalam konteks situs mereka sendiri dengan menggunakan script
tag di HTML. misalnya pada www.evil.com
:
<script src="http://www.example.com/User/GetUser/32"></script>
JavaScript ini seharusnya tidak berguna www.evil.com
karena seharusnya tidak ada cara membaca objek yang dikembalikan oleh metode web Anda. Namun, karena bug di versi lama browser (mis. Firefox 3), objek prototipe JavaScript dapat didefinisikan ulang dan memungkinkan untuk www.evil.com
membaca data Anda yang dikembalikan oleh metode Anda. Ini dikenal sebagai JSON Hijacking.
Lihat posting ini untuk beberapa metode mencegah ini. Namun, ini bukan masalah yang diketahui dengan versi browser modern yang lebih baru (Firefox, Chrome, IE).
www.example.com/User/DeleteUser/32
) karena permintaan akan menyertakan cookie yang diperlukan untuk otentikasi karena berasal dari mesin korban.[Authorize]
tidak akan menyelamatkan Anda dari serangan yang dirinci di sini dalam kasus browser yang sangat lama juga - pengguna itu sendiri yang mengunjungiwww.evil.com
sehingga permintaan yangwww.evil.com
dibuat untukwww.example.com
akan berisi cookie otorisasi.dalam pengembalian Anda gunakan yang berikut ini:
sumber
Secara default, kerangka kerja ASP.NET MVC tidak memungkinkan Anda untuk menanggapi permintaan GET dengan muatan JSON karena ada kemungkinan pengguna jahat dapat memperoleh akses ke muatan melalui proses yang dikenal sebagai JSON Hijacking. Anda tidak ingin mengembalikan informasi sensitif menggunakan JSON dalam permintaan GET.
Jika Anda perlu mengirim JSON sebagai respons terhadap GET, dan tidak mengekspos data sensitif, Anda dapat secara eksplisit mengizinkan perilaku dengan meneruskan
JsonRequestBehavior.AllowGet
sebagai parameter kedua keJson
metode.Seperti
Berikut adalah artikel menarik dari Phil Haack
JSON Hijacking
tentang mengapa tidak menggunakan Json dengan metode GETsumber
Ketika kita ingin mengembalikan objek json ke klien dari aplikasi MVC, kita harus secara eksplisit menentukan JsonRequestBehavior.AllowGet saat mengembalikan objek. Akibatnya, saya mengembalikan data json seperti di bawah ini untuk mengatasi masalah tersebut:
sumber
Anda harus menggunakan JsonRequestBehavior.AllowGet untuk Json Response seperti ini:
sumber
return Json ("Success", JsonRequestBehavior.AllowGet)
sumber