আপনি ব্যবহার করতে পারেন 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()
ফাংশনে পাসের আগে সমস্ত ব্যবহারকারী-সরবরাহিত ডেটা সার্ভার-সাইড পরীক্ষা করি তবে কেন কেবল জেএসএনকে পার্স করার জন্য অন্তর্নির্মিত সরঞ্জামটি ব্যবহার না করে এবং এই সমস্ত সমস্যা এবং বিপদ এড়ানো উচিত নয়?