Spider Sense saya memperingatkan saya bahwa menggunakan eval()
untuk mengurai JSON yang masuk adalah ide yang buruk. Saya hanya ingin tahu apakah JSON.parse()
- yang saya asumsikan sebagai bagian dari JavaScript dan bukan fungsi khusus browser - lebih aman.
javascript
json
Kevin Major
sumber
sumber
JSON.parse
lebih cepat daripadaeval
, setidaknya di V8 (mesin JS Chromium). Sumber .Jawaban:
Anda lebih rentan terhadap serangan jika menggunakan
eval
: JSON adalah bagian dari Javascript dan json.parse hanya mem-parsing JSON sedangkaneval
akan membiarkan pintu terbuka untuk semua ekspresi JS.sumber
eval('alert(1)');
.Semua
JSON.parse
implementasi kemungkinan besar digunakaneval()
JSON.parse
didasarkan pada solusi Douglas Crockford , yang digunakaneval()
di sana pada baris 497 .Keuntungan dari
JSON.parse
adalah bahwa itu memverifikasi argumen sintaks JSON yang benar.sumber
JSON.parse()
di Firefox 28 dan Chromium 33 pada sistem Linux Mint saya. Itu 2x secepateval()
di Firefox dan 4x lebih cepat di Chromium. Saya tidak yakin kode sumber apa yang Anda posting, tetapi itu tidak sama di browser saya.JSON.parse()
implementasi asli yang lebih aman dan lebih cepat daripadaeval()
pengurai berbasis.Tidak semua browser memiliki dukungan JSON asli sehingga ada saatnya Anda perlu menggunakan
eval()
string JSON. Gunakan parser JSON dari http://json.org karena itu menangani semuanya dengan lebih mudah untuk Anda.Eval()
adalah kejahatan tetapi terhadap beberapa browser, ini adalah kejahatan yang diperlukan tetapi di mana Anda dapat menghindarinya, lakukanlah !!!!!sumber
Ada perbedaan antara apa yang akan diterima JSON.parse () dan eval (). Coba evaluasi ini:
var x = "{\" shoppingCartName \ ": \" shopping_cart: 2000 \ "}"
Lihat contoh ini .
sumber
Jika Anda mengurai JSON dengan
eval
, Anda mengizinkan string yang diurai berisi apa saja, jadi alih-alih hanya menjadi sekumpulan data, Anda dapat menemukan diri Anda menjalankan panggilan fungsi, atau apa pun.Selain itu, JSON
parse
menerima parameter tambahan, reviver, yang memungkinkan Anda menentukan cara menangani nilai-nilai tertentu, seperti waktu (info lebih lanjut dan contoh dalam dokumentasi inline di sini )sumber
JSON hanyalah bagian dari JavaScript. Tetapi
eval
mengevaluasi bahasa JavaScript lengkap dan bukan hanya subset yang JSON.sumber
JSON.parse
(diterapkan langsung ke mesin JavaScript) hanya mem-parsing JSON. Tetapi penggunaan implementasi non-native lainnya melakukan pemeriksaan kewarasan dan kemudian digunakaneval
untuk alasan performa.