आप उपयोग भी कर सकते हैं eval()
लेकिन JSON.parse()
सुरक्षित और आसान तरीका है, तो आप क्यों करेंगे?
अच्छा और काम करता है
var yourJsonObject = JSON.parse(json_as_text);
मुझे कोई कारण नहीं दिखता कि आप क्यों इस्तेमाल करना पसंद करेंगे eval
। यह केवल आपके आवेदन को जोखिम में डालता है।
जैसा कि कहा गया है - यह है भी संभव।
बुरा - लेकिन यह भी काम करता है
var yourJsonObject = eval(json_as_text);
eval
एक बुरा विचार क्यों है ?
निम्नलिखित उदाहरण पर विचार करें।
कुछ तृतीय पक्ष या उपयोगकर्ता ने JSON स्ट्रिंग डेटा प्रदान किया।
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"
}]
`;
आपका सर्वर-साइड स्क्रिप्ट उस डेटा को प्रोसेस करता है।
का उपयोग कर JSON.parse
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = JSON.parse(json)[0].adjacencies[0].nodeTo;
}
फेंक देंगे:
Uncaught SyntaxError: Unexpected token u in JSON at position X.
कार्य निष्पादित नहीं किया जाएगा।
आप सुरक्षित है।
का उपयोग कर eval()
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = eval(json)[0].adjacencies[0].nodeTo;
}
फ़ंक्शन निष्पादित करेगा और पाठ वापस करेगा।
अगर मैं उस हानिरहित फ़ंक्शन को एक के साथ प्रतिस्थापित करता हूं जो आपके वेबसाइट फ़ोल्डर से फ़ाइलों को हटा देता है जिसे आपने हैक किया है। इस उदाहरण में कोई त्रुटि / चेतावनी नहीं दी जाएगी।
आप सुरक्षित नहीं हैं।
मैं JSON टेक्स्ट स्ट्रिंग में हेरफेर करने में सक्षम था इसलिए यह एक फ़ंक्शन के रूप में कार्य करता है जो सर्वर पर निष्पादित होगा।
eval(JSON)[0].adjacencies[0].nodeTo
एक JSON स्ट्रिंग को संसाधित करने की अपेक्षा करता है, लेकिन वास्तव में, हमने अपने सर्वर पर एक फ़ंक्शन निष्पादित किया है।
यह भी रोका जा सकता है अगर हम सर्वर-साइड एक eval()
फ़ंक्शन को पास करने से पहले सभी उपयोगकर्ता-प्रदान किए गए डेटा की जांच करते हैं, लेकिन सिर्फ JSON को पार्स करने के लिए अंतर्निहित टूल का उपयोग क्यों नहीं करते हैं और इस सभी परेशानी और खतरे से बचते हैं?