Ayrıca kullanabilirsiniz, eval()
ancak JSON.parse()
daha güvenli ve daha kolay bir yol, neden?
iyi ve çalışıyor
var yourJsonObject = JSON.parse(json_as_text);
Kullanmayı tercih etmek için hiçbir neden göremiyorum eval
. Sadece uygulamanızı riske atar.
Yani - bu olduğunu da mümkündür.
kötü - ama aynı zamanda çalışıyor
var yourJsonObject = eval(json_as_text);
Neden eval
kötü bir fikir?
Aşağıdaki örneği ele alalım.
Bazı üçüncü taraflar veya kullanıcılar JSON dize verileri sağladı.
var json = `
[{
"adjacencies": [
{
"nodeTo": function(){
return "delete server files - you have been hacked!";
}(),
"nodeFrom": "graphnode1",
"data": {
"$color": "#557EAA"
}
}
],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode1",
"name": "graphnode1"
},{
"adjacencies": [],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode2",
"name": "graphnode2"
}]
`;
Sunucu tarafı komut dosyanız bu verileri işler.
Kullanma JSON.parse
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = JSON.parse(json)[0].adjacencies[0].nodeTo;
}
atacak:
Uncaught SyntaxError: Unexpected token u in JSON at position X.
İşlev yürütülmez.
Sen güvendesin.
Kullanma eval()
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = eval(json)[0].adjacencies[0].nodeTo;
}
işlevi yürütür ve metni döndürür.
Bu zararsız işlevi, web sitesi klasörünüzdeki dosyaları kaldıran bir işlevle değiştirirsem saldırıya uğradınız. Bu örnekte hiçbir hata / uyarı verilmeyecektir.
Sen güvende DEĞİLSİN.
Sunucuda yürütecek bir işlev gibi davranır bir JSON metin dizesi manipüle başardı.
eval(JSON)[0].adjacencies[0].nodeTo
JSON dizesini işlemeyi umuyor ancak gerçekte sunucumuzda bir fonksiyon yürüttük.
Bu, sunucu tarafında bir eval()
işleve geçmeden önce kullanıcı tarafından sağlanan tüm verileri kontrol edersek de önlenebilir, ancak neden JSON'u ayrıştırmak ve tüm bu sorun ve tehlikelerden kaçınmak için yerleşik aracı kullanmıyorsunuz?