আমার স্পাইডার সেন্স আমাকে সতর্ক করেছে যে eval()
আগত জেএসওনকে বিশ্লেষণ করতে ব্যবহার করা একটি খারাপ ধারণা। আমি কেবল ভাবছি JSON.parse()
- যা আমি মনে করি জাভাস্ক্রিপ্টের একটি অংশ এবং ব্রাউজার-নির্দিষ্ট ফাংশন নয় - এটি আরও সুরক্ষিত কিনা।
আমার স্পাইডার সেন্স আমাকে সতর্ক করেছে যে eval()
আগত জেএসওনকে বিশ্লেষণ করতে ব্যবহার করা একটি খারাপ ধারণা। আমি কেবল ভাবছি JSON.parse()
- যা আমি মনে করি জাভাস্ক্রিপ্টের একটি অংশ এবং ব্রাউজার-নির্দিষ্ট ফাংশন নয় - এটি আরও সুরক্ষিত কিনা।
উত্তর:
আক্রমণগুলি ব্যবহার করার ক্ষেত্রে আপনি আরও ঝুঁকির মধ্যে আছেনeval
: জেএসএন হ'ল জাভাস্ক্রিপ্টের একটি উপসেট এবং json.parse কেবল JSON কে পার্স করে যেখানে eval
সমস্ত জেএস এক্সপ্রেশনগুলির জন্য দরজা উন্মুক্ত রাখবে।
eval('alert(1)');
।
সমস্ত JSON.parse
বাস্তবায়ন সম্ভবত ব্যবহার হয়eval()
JSON.parse
ডগলাস ক্রকফোর্ডের সমাধানের উপর ভিত্তি করে তৈরি করা হয়েছে যা 497 লাইনেeval()
ঠিক সেখানে ব্যবহার করে ।
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
এর সুবিধাটি JSON.parse
হ'ল এটি যুক্তিটি সঠিক JSON সিনট্যাক্সটি যাচাই করে।
JSON.parse()
আমার লিনাক্স মিন্ট সিস্টেমে ফায়ারফক্স 28 এবং ক্রোমিয়াম 33 এ পরীক্ষা করেছি। এটি eval()
ফায়ারফক্সের মতো 2x এবং ক্রোমিয়ামে 4x গতিযুক্ত ছিল। আপনি কোন সোর্স কোড পোস্ট করছেন তা আমি নিশ্চিত নই তবে আমার ব্রাউজারগুলিতে সেগুলি একই জিনিস নয়।
JSON.parse()
বাস্তবায়ন সরবরাহ করে যা eval()
বেসড পার্সারদের চেয়ে নিরাপদ এবং দ্রুত ।
সমস্ত ব্রাউজারের নেটিভ জেএসওএন সমর্থন নেই তাই এমন সময় আসবে যেখানে আপনাকে eval()
জেএসএন স্ট্রিং ব্যবহার করতে হবে। Http://json.org থেকে জেএসএন পার্সার ব্যবহার করুন যা আপনার পক্ষে সবকিছু সহজসাধ্যভাবে পরিচালনা করে।
Eval()
এটি একটি মন্দ তবে কিছু ব্রাউজারের বিরুদ্ধে এটি একটি প্রয়োজনীয় মন্দ তবে যেখানে আপনি এটি এড়াতে পারবেন, তাই করুন !!!!!
JSON.parse () এবং eval () গ্রহণ করবে তার মধ্যে পার্থক্য রয়েছে। এটি সম্পর্কে চেষ্টা করুন:
var x = "{\" শপিংকার্টনাম \ ": \" শপিং_কার্ট: 2000 \ "}"
eval(x) //won't work
JSON.parse(x) //does work
এই উদাহরণটি দেখুন ।
আপনি যদি JSON এর সাথে পার্স করেন eval
, আপনি স্ট্রিংটিকে একেবারে কিছু অন্তর্ভুক্ত করার অনুমতি দিচ্ছেন, সুতরাং কেবলমাত্র ডেটার সেট হওয়ার পরিবর্তে আপনি নিজেকে ফাংশন কলগুলি কার্যকর করতে পারেন বা যা কিছু করতে পারেন।
এছাড়াও, তাদেরকে JSON এর parse
একটি অতিরিক্ত প্যারামিটার হয়, পুনরায় জীবত কারক গ্রহণ, যা আপনাকে (আরও তথ্য এবং ইনলাইন ডকুমেন্টেশন উদাহরণ যেমন datetimes নির্দিষ্ট মূল্যবোধ, সঙ্গে মোকাবিলা করার জন্য কিভাবে উল্লেখ এখানে )
জেএসএন জাভাস্ক্রিপ্টের কেবলমাত্র একটি উপসেট। তবে eval
পুরো জাভাস্ক্রিপ্ট ভাষাটি মূল্যায়ন করে কেবল জেএসওনের উপসেটটি নয়।
JSON.parse
(সরাসরি জাভাস্ক্রিপ্ট ইঞ্জিনে প্রয়োগ করা হয়েছে) কেবল জেএসএনকে পার্স করে। তবে অন্যান্য অ-নেটিভ বাস্তবায়নগুলি কিছুটা স্যানিটি পরীক্ষা করে এবং তারপরে eval
পারফরম্যান্সের কারণে ব্যবহার করে ।
JSON.parse
চেয়ে দ্রুতeval
। উত্স ।