javascript - formatter - json validator




কেন গুগল প্রিপেইড(1); তাদের JSON প্রতিক্রিয়া? (4)

এটি JSON হাইজ্যাকিং প্রতিরোধ করে, যা একটি প্রধান JSON সুরক্ষা সমস্যা যা আনুষ্ঠানিকভাবে ২011 সাল থেকে EMCA5 এর সাথে সমস্ত প্রধান ব্রাউজারে fixed হয়।

কনভাইডেড উদাহরণ: গুগলের একটি URL রয়েছে যা mail.google.com/json?action=inbox যা JSON ফরম্যাটে আপনার ইনবক্সের প্রথম 50 টি বার্তা ফেরত দেয়। অন্যান্য ডোমেইনের ইভিল ওয়েবসাইটগুলি একই ডেটা পাওয়ার কারণে এই ডেটা পেতে AJAX অনুরোধগুলি করতে পারে না, তবে তারা <script> ট্যাগের মাধ্যমে URL অন্তর্ভুক্ত করতে পারে। ইউআরএলটি আপনার কুকিজের সাথে পরিদর্শন করা হয় এবং গ্লোবাল অ্যারে কন্সট্রাকটর বা অ্যাক্সেসর পদ্ধতিগুলি ওভাররাইড করার মাধ্যমে তাদের যখন কোনও বস্তু (অ্যারে বা হ্যাশ) বৈশিষ্ট্য সেট করা থাকে তখন এটি একটি পদ্ধতি থাকতে পারে যা তাদের JSON সামগ্রী পড়তে দেয়।

while(1); অথবা &&&BLAH&&& কিন্তু একটি <script> ট্যাগ সন্নিবেশ কোনও প্রক্রিয়াকরণ ছাড়াই জাভাস্ক্রিপ্টটিকে অন্ধভাবে চালায়, যার ফলে একটি অসীম লুপ বা সিনট্যাক্স ত্রুটি হয়।

এই ক্রস সাইট অনুরোধ জালিয়াতি সমস্যা মোকাবেলা করে না।

কেন গুগল প্রিপেইড while(1); তাদের (ব্যক্তিগত) JSON প্রতিক্রিয়া?

উদাহরণস্বরূপ, গুগল ক্যালেন্ডারে একটি ক্যালেন্ডার চালু এবং বন্ধ করার সময় এখানে একটি প্রতিক্রিয়া:

while(1);[['u',[['smsSentFlag','false'],['hideInvitations','false'],
  ['remindOnRespondedEventsOnly','true'],
  ['hideInvitations_remindOnRespondedEventsOnly','false_true'],
  ['Calendar ID stripped for privacy','false'],['smsVerifiedFlag','true']]]]

আমি মনে করি এটি লোকেদের উপর একটি eval() বাধা দেবে, তবে আপনাকে অবশ্যই করতে হবে কেবল তখনই প্রতিস্থাপন করা হবে এবং তারপরে সেটআপ করা হবে। আমি Eval প্রতিরোধ নিশ্চিত করা হয় মানুষ নিরাপদ JSON পার্সিং কোড লিখতে নিশ্চিত করা হয়।

আমি এটি অন্য কয়েকটি স্থানেও ব্যবহার করেছি দেখেছি, তবে Google এর সাথে আরও অনেক কিছু (মেল, ক্যালেন্ডার, পরিচিতি, ইত্যাদি) এর সাথে বিস্ময়করভাবে যথেষ্ট, Google ডক্স &&&START&&& পরিবর্তে শুরু হয় এবং Google পরিচিতিগুলি while(1); &&&START&&& শুরু হয় while(1); &&&START&&& মনে হচ্ছে while(1); &&&START&&& while(1); &&&START&&&

এখানে কি হচ্ছে?


এটি JSON হাইজ্যাকিং এর মাধ্যমে প্রতিক্রিয়া প্রকাশ করে।

তত্ত্ব অনুসারে, HTTP প্রতিক্রিয়াগুলির বিষয়বস্তু একই মূল নীতি দ্বারা সুরক্ষিত: এক ডোমেনের পৃষ্ঠাগুলি অন্য ডোমেনে পৃষ্ঠাগুলির থেকে কোনও তথ্য সরবরাহ করতে পারে না (যদি না স্পষ্টভাবে অনুমোদিত হয়)।

একজন আক্রমণকারী আপনার পক্ষ থেকে অন্য ডোমেনগুলির পৃষ্ঠাগুলির অনুরোধ করতে পারেন, উদাহরণস্বরূপ <script src=...> বা <img> ট্যাগটি ব্যবহার করে, তবে এটি ফলাফল (শিরোনাম, সামগ্রী) সম্পর্কে কোনো তথ্য পেতে পারে না।

সুতরাং, যদি আপনি কোনও আক্রমণকারীর পৃষ্ঠায় যান তবে এটি gmail.com থেকে আপনার ইমেল পড়তে পারে না।

এছাড়া JSON সামগ্রী অনুরোধ করার জন্য একটি স্ক্রিপ্ট ট্যাগ ব্যবহার করার সময়, JSON আক্রমণকারীর নিয়ন্ত্রিত পরিবেশে জাভাস্ক্রিপ্ট হিসাবে মৃত্যুদন্ড কার্যকর করা হয়। যদি আক্রমণকারী অ্যারে বা অবজেক্ট কনস্ট্রাকটর বা বস্তুর নির্মাণের সময় ব্যবহৃত অন্য কোন পদ্ধতি প্রতিস্থাপন করতে পারে তবে JSON- এ যেকোনো কিছু আক্রমণকারীর কোডটি পাস করবে এবং প্রকাশ করা হবে।

উল্লেখ্য যে এটি JSON জাভাস্ক্রিপ্ট হিসাবে মৃত্যুদন্ড কার্যকর করা হয়, যখন এটি পরীক্ষার সময় নয়।

একাধিক পাল্টা ব্যবস্থা আছে:

JSON কখনও executes নিশ্চিত করা

while(1); রেখে while(1); JSON ডেটা আগে বিবৃতি, Google নিশ্চিত করে যে JSON ডেটা জাভাস্ক্রিপ্ট হিসাবে কখনও কার্যকর হয় না।

শুধুমাত্র একটি বৈধ পৃষ্ঠা আসলে সমগ্র সামগ্রী পেতে পারে, while(1); ফালা while(1); , এবং JSON হিসাবে বাকি পার্স।

for(;;); ভালো জিনিস for(;;); উদাহরণস্বরূপ, একই ফলাফল সঙ্গে ফেসবুকে দেখা হয়েছে।

JSON বৈধ জাভাস্ক্রিপ্ট নয় তা নিশ্চিত করা

একইভাবে, JSON এর আগে অবৈধ টোকেন যোগ করা, যেমন &&&START&&& , নিশ্চিত করে যে এটি কখনই কার্যকর হয় নি।

সর্বদা বাইরে একটি বস্তুর সাথে JSON ফিরে

এই JSON হাইজ্যাকিং থেকে রক্ষা করার জন্য OWASP প্রস্তাবিত উপায় , এবং কম অন্তর্মুখী এক।

অনুরূপ পূর্ববর্তী পাল্টা পদক্ষেপের ক্ষেত্রে, এটি নিশ্চিত করে যে JSON জাভাস্ক্রিপ্ট হিসাবে কখনও কার্যকর হয় না।

কোনও বৈধ JSON বস্তু, যা কিছু দ্বারা আবদ্ধ না হলে, জাভাস্ক্রিপ্টে বৈধ নয়:

eval('{"foo":"bar"}')
// SyntaxError: Unexpected token :

তবে এটি বৈধ JSON:

JSON.parse('{"foo":"bar"}')
// Object {foo: "bar"}

সুতরাং, আপনি সর্বদা প্রতিক্রিয়া শীর্ষ স্তরে একটি অবজেক্ট প্রত্যাহার করছেন তা নিশ্চিত করুন যে JSON বৈধ JSON হওয়া সত্বেও JSON বৈধ জাভাস্ক্রিপ্ট নয়।

মন্তব্যে @ এইচভিড দ্বারা উল্লিখিত, খালি বস্তু {} বৈধ জাভাস্ক্রিপ্ট এবং বুদ্ধিমান বস্তুটি খালি থাকলে এটি মূল্যবান তথ্য হতে পারে।

উপরের পদ্ধতি তুলনা

OWASP উপায়টি কম বিভ্রান্তিকর, এটি কোন ক্লায়েন্ট লাইব্রেরি পরিবর্তন প্রয়োজন এবং বৈধ JSON স্থানান্তরিত। অতীতের বা ভবিষ্যতের ব্রাউজারের বাগগুলি এইটিকে পরাজিত করতে পারে কিনা তা নিশ্চিত নয়। @ ওরিদাম দ্বারা উল্লিখিত হিসাবে, ত্রুটিটি হ্যান্ডলিংয়ের মাধ্যমে কোনও পার্স ত্রুটিতে তথ্যটি ফুরিয়ে যেতে পারে কিনা তা স্পষ্ট নয় (উদাঃ window.onerror)।

স্বয়ংক্রিয়ভাবে ডি-সিরিয়ালাইজেশন সমর্থন করার জন্য Google এর পথে ক্লায়েন্ট লাইব্রেরির প্রয়োজন হয় এবং ব্রাউজারের বাগগুলির ক্ষেত্রে এটি নিরাপদ বলে বিবেচিত হতে পারে।

দুর্ঘটনাক্রমে দুর্বল JSON পাঠানো থেকে ডেভেলপারদের এড়াতে উভয় পদ্ধতি সার্ভার পার্শ্ব পরিবর্তন প্রয়োজন।


এটি একটি তৃতীয় পক্ষের জন্য <script> ট্যাগের সাথে একটি HTML নথিতে JSON প্রতিক্রিয়া সন্নিবেশ করা কঠিন করে তুলতে হবে। মনে রাখবেন <script> ট্যাগ একই মূল নীতি থেকে মুক্ত।


এটি একটি সহজ <script> ট্যাগের লক্ষ্য হিসাবে ব্যবহার করা থেকে আটকায়। (ওয়েল, এটি এটিকে বাধা দেয় না, তবে এটি অপ্রীতিকর করে তোলে।) এভাবে খারাপ লোকেরা কেবল নিজের স্ক্রিপ্টটিতে সেই স্ক্রিপ্ট ট্যাগটি রাখতে পারে না এবং আপনার সামগ্রীটি আনতে এটি সক্রিয় করার জন্য সক্রিয় সেশনে নির্ভর করে।

সম্পাদনা - মন্তব্য (এবং অন্যান্য উত্তর) নোট করুন। সমস্যাটি অন্তর্নির্মিত অন্তর্নির্মিত সুবিধাগুলি, বিশেষ করে Object এবং Array কনস্ট্রাক্টরগুলির সাথে করতে হবে। যারা পরিবর্তন করা যেতে পারে যে অন্যথায় নির্দোষ JSON, যখন বিশ্লেষণ, আক্রমণকারী কোড ট্রিগার করতে পারে।





security