গুগল কেন (1) যখন পূর্বে সংশোধন করে; তাদের JSON প্রতিক্রিয়া?


4074

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

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

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

আমি ধরে নেব এটি হ'ল লোকেদের এটি থেকে বিরত রাখা eval(), তবে আপনাকে যা করতে হবে তা হ'ল প্রতিস্থাপন whileএবং তারপরে আপনি সেট হয়ে যাবেন। আমি ধরে নেব যে লোকেরা নিরাপদ জেএসওএন পার্সিং কোডটি লিখেছেন তা নিশ্চিত করা alভাল প্রতিরোধ।

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

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


45
আমি বিশ্বাস করি যে আপনার প্রথম ধারণাটি সঠিক। যদি আপনি কোড সন্ধান শুরু করেন এবং উত্সের উপর নির্ভর করে ইনপুট স্ট্রিমটি ছাঁটাই করার চেষ্টা করেন, আপনি নিরাপদে (এবং গুগলের ক্রিয়াগুলির কারণে, সহজ) উপায়ে পুনর্বিবেচনা করতে এবং এটি করতে চান।
এস্তেবান কাবার

34
সম্ভবত একটি ফলো-আপ প্রশ্ন: গুগল কেন )]}'এখন পরিবর্তে এখন পূর্বে বিক্রয় করে while(1);? উত্তর কি একই হবে?
গিজমো

3
Alভালকে আটকাতে পারে, তবে অসীম লুপের সাথে নয়।
মার্ডক্সক্স 6'17

9
এটি )]}'বাইটগুলি সংরক্ষণ করতেও হতে পারে, যেমন ফেসবুক ব্যবহৃত for(;;);যা একটি বাইট সংরক্ষণ করে :)
গ্রাস ডাবল

3
জসন উদ্বোধন প্রতিরোধের জন্য JSON hijacking
অর্ডার

উত্তর:


4293

এটি JSON হাইজ্যাকিং প্রতিরোধ করে , একটি বড় JSON সুরক্ষা ইস্যু যা ECMAScript 5 দিয়ে ২০১১ সাল থেকে সমস্ত বড় ব্রাউজারে আনুষ্ঠানিকভাবে ঠিক করা হয়েছে ।

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

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

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


228
এই ডেটা পাওয়ার অনুরোধটির পরিবর্তে কোনও সিএসআরএফ-টোকেনের প্রয়োজন নেই কেন?
জাকুব পি।

235
না for(;;);একই কাজ? আমি এটি ফেসবুকের এজাক্স প্রতিক্রিয়াগুলিতে দেখেছি।
কিং জুলিয়েন

183
@JakubP। গুগলের স্কেলে সিএসআরএফ-টোকেন সংরক্ষণ এবং রক্ষণাবেক্ষণের জন্য বিশাল পরিমাণের অবকাঠামো এবং ব্যয় প্রয়োজন।
আব্রাহাম

127
@JakubP। অ্যান্টি-সিএসআরএফ ক্যাচিংয়ের সাথে অশোভন টোকেন করে এবং কিছু পরিমাণ ক্রিপ্টোগ্রাফিক মূল্যায়ন সার্ভার-সাইড প্রয়োজন require গুগল স্কেলে এর জন্য প্রচুর সিপিইউ লাগবে। এই ধরণের অফার এটি ক্লায়েন্টের কাছে লোড করে।
ব্লুজমুন

96
আমার কাছে মনে হয় এর চেয়ে ভাল উপায় হ'ল যদি সঠিক শিরোনামটি সেট করা থাকে তবে সার্ভারটি কেবল JSON প্রেরণ করতে পারে। আপনি এজেএক্স কলটিতে এটি করতে পারেন, তবে স্ক্রিপ্ট ট্যাগ সহ নয়। এইভাবে, সংবেদনশীল তথ্য কখনও পাঠানো হয় না এবং আপনাকে ব্রাউজারের দিকের সুরক্ষার উপর নির্ভর করতে হবে না।
এমসিভি

574

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

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

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

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

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

নোট করুন যে JSON জাভাস্ক্রিপ্ট হিসাবে মৃত্যুদন্ড কার্যকর করার সময় ঘটেছিল, পার্স করার সময় নয়।

একাধিক প্রতিরোধ ব্যবস্থা রয়েছে:

জেএসএন কখনই কার্যকর করে না তা নিশ্চিত করে

while(1);জেএসএন ডেটার আগে একটি বিবৃতি রেখে গুগল নিশ্চিত করে যে জাসন স্ক্রিপ্ট হিসাবে কখনই জেএসএন ডেটা কার্যকর করা হয় না।

কেবলমাত্র একটি বৈধ পৃষ্ঠায় পুরো সামগ্রীটি পাওয়া যাবে, ছাঁটাতে পারত while(1);এবং বাকি অংশটি JSON হিসাবে পার্স করতে পারত ।

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

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

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

সর্বদা বাইরের কোনও বস্তুর সাথে JSON ফিরিয়ে দিন

এটি JSON হাইজ্যাকিং থেকে রক্ষা করার OWASPপ্রস্তাবিত উপায় এবং এটি স্বল্প হস্তক্ষেপ।

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

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

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

এটি তবে বৈধ JSON:

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

সুতরাং, আপনি জবাবের শীর্ষ স্তরের সর্বদা কোনও বস্তু ফিরে আসবেন তা নিশ্চিত করুন যে এখনও জেএসএন বৈধ থাকাকালীন JSON বৈধ জাভাস্ক্রিপ্ট নয়।

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

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

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

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

দু'টি পদ্ধতিরই বিকাশকারীদের দুর্ঘটনাক্রমে দুর্বল JSON প্রেরণ করা থেকে বাঁচতে সার্ভার-পার্শ্ব পরিবর্তনগুলি প্রয়োজন।


23
OWASP এর সুপারিশটি তার সরলতার কারণে আকর্ষণীয়। গুগলের পথ আরও সুরক্ষিত হওয়ার কারণটি কি কেউ জানেন?
ফানরল

18
আমি বিশ্বাস করি এটি কোনওভাবেই বেশি সুরক্ষিত নয় । এখানে OWASP সরবরাহ করা +1 এর পক্ষে যথেষ্ট উপযুক্ত কারণ বলে মনে হচ্ছে।

30
এটি লক্ষ্য করার মতো হতে পারে কেন কোনও বস্তুর আক্ষরিক ফিরিয়ে দেওয়া scriptট্যাগ বা evalফাংশনে ব্যর্থ হয় । ধনুর্বন্ধনী {}কোড কোড বা একটি বস্তু আক্ষরিক একটি ব্লক হিসাবে ব্যাখ্যা করা যেতে পারে, এবং নিজেই জাভাস্ক্রিপ্ট আগের পছন্দ। কোডের ব্লক হিসাবে এটি অবশ্যই অবৈধ। এই যুক্তি দ্বারা, আমি ভবিষ্যতের ব্রাউজার আচরণে কোন প্রত্যাশিত পরিবর্তন দেখতে পাচ্ছি না।
মাংগো

16
খারাপ কোড যথেষ্ট নয় কারণ আক্রমণকারী ব্রাউজারের স্ক্রিপ্ট-ত্রুটি হ্যান্ডারটিকে হাইজ্যাকও করতে পারে ( window.onerror) onerrorসিনট্যাক্স ত্রুটির সাথে আচরণটি কী তা আমি নিশ্চিত নই । আমার ধারণা গুগলও অনিশ্চিত ছিল।
অরিয়াদাম

12
"একটি বৈধ JSON অবজেক্ট, যখন কোনও কিছুর দ্বারা আবদ্ধ নয়, জাভাস্ক্রিপ্টে বৈধ নয়:" - খালি অবজেক্টের তুচ্ছ ঘটনা ব্যতীত ( {}) যা বৈধ খালি ব্লকও। যদি অবজেক্টটি খালি থাকে তা নিজেই মূল্যবান তথ্য হতে পারে তবে এটি শোষণযোগ্য হতে পারে।

371

এটি নিশ্চিত করার জন্য যে অন্য কোনও সাইট আপনার ডেটা চুরি করার চেষ্টা করতে বাজে কৌশল করতে পারে না। উদাহরণস্বরূপ, অ্যারে নির্মাণকারীকে প্রতিস্থাপন করে , তারপরে এই JSON URL টি কোনও <script>ট্যাগের মাধ্যমে অন্তর্ভুক্ত করে , একটি দূষিত তৃতীয় পক্ষের সাইট JSON প্রতিক্রিয়া থেকে ডেটা চুরি করতে পারে। while(1);শুরুতে একটি রেখে , স্ক্রিপ্ট পরিবর্তে স্তব্ধ হয়ে যাবে।

অন্যদিকে এক্সএইচআর এবং একটি পৃথক জেএসএন পার্সার ব্যবহার করে একই সাইটের অনুরোধ সহজেই while(1);উপসর্গটিকে উপেক্ষা করতে পারে ।


6
প্রযুক্তিগতভাবে, যদি আপনার উপসর্গ থাকে তবে একটি "সাধারণ" জেএসএন পার্সার একটি ত্রুটি দেবে।
ম্যাথু ক্রামলে

12
আক্রমণকারীরা কেবল <script>একটি এক্সএইচআর নয়, কেবল একটি সরল পুরাতন উপাদান ব্যবহার করবে ।
লরেন্স গনসাল্ভেস

9
@ ম্যাথিউ, নিশ্চিত, তবে আপনি JSON পার্সারে ডেটা দেওয়ার আগে এটি সরাতে পারেন। আপনি <script>ট্যাগ সহ এটি করতে পারবেন না
বিডনলান

7
এর কোন উদাহরণ আছে কি? অ্যারে কনস্ট্রাক্টর প্রতিস্থাপন আবার উল্লেখ করা হয়, কিন্তু এটি একটি বাগ দীর্ঘ স্থির। স্ক্রিপ্ট ট্যাগের মাধ্যমে প্রাপ্ত ডেটাতে একজনের কীভাবে অ্যাক্সেস থাকবে তা আমি বুঝতে পারি না। আমি সাম্প্রতিক ব্রাউজারে কাজ করে এমন একটি ডামি বাস্তবায়ন দেখতে পছন্দ করব।
ডেনিস জি

7
@ জোলটাইন, না, তা নয়। স্ট্যাকওভারফ্লো . com/ জিজ্ঞাসা / 16289894/ … দেখুন ।

111

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


21
এটি অর্ধেক উত্তর মাত্র। যদি এটি Objectএবং Arrayনির্মাণকারীদের ওভাররাইড করার কৌশলটি না হয় তবে একটি বৈধ JSON প্রতিক্রিয়া সম্পাদন করা যেমন জাভাস্ক্রিপ্ট সমস্ত পরিস্থিতিতে সম্পূর্ণ নির্দোষ হবে। হ্যাঁ, while(1);কোনও <script>ট্যাগ দ্বারা লক্ষ্যযুক্ত হলে জাভাস্ক্রিপ্ট হিসাবে সম্পাদিত হওয়া থেকে প্রতিক্রিয়া প্রতিরোধ করে , তবে কেন এটি প্রয়োজনীয় তা আপনার উত্তরটি ব্যাখ্যা করে না।
মার্ক

তবে কীভাবে এটি iframes প্রতিরোধ করবে
রবীন্দ্র পায়েল 3'16

স্ক্রিপ্ট ট্যাগ কখনও একই উত্স নীতি থেকে অব্যাহতি পায় না। আপনি আমার জন্য এটি পরিষ্কার করতে পারেন?
সুরজ জৈন

82

দ্রষ্টব্য : 2019 পর্যন্ত, এই প্রশ্নে আলোচিত প্রতিরোধমূলক ব্যবস্থায় পরিচালিত অনেক পুরানো দুর্বলতা এখন আর আধুনিক ব্রাউজারগুলিতে সমস্যা নয় an আমি নীচের উত্তরটি একটি curতিহাসিক কৌতূহল হিসাবে ছেড়ে দেব, তবে সত্যিই পুরো বিষয়টিটি 2010 (!!) থেকে যখন জিজ্ঞাসা করা হয়েছিল তখন থেকে আমূল পরিবর্তন হয়েছে।


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

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


17
এটি অর্ধেক উত্তর মাত্র। যদি এটি Objectএবং Arrayনির্মাণকারীদের ওভাররাইড করার কৌশলটি না হয় তবে একটি বৈধ JSON প্রতিক্রিয়া সম্পাদন করা যেমন জাভাস্ক্রিপ্ট সমস্ত পরিস্থিতিতে সম্পূর্ণ নির্দোষ হবে। হ্যাঁ, while(1);কোনও <script>ট্যাগ দ্বারা লক্ষ্যযুক্ত হলে জাভাস্ক্রিপ্ট হিসাবে সম্পাদিত হওয়া থেকে প্রতিক্রিয়া প্রতিরোধ করে , তবে কেন এটি প্রয়োজনীয় তা আপনার উত্তরটি ব্যাখ্যা করে না।
মার্ক

11

যেহেতু <script>ট্যাগটি একই অরিজিন নীতি থেকে ছাড় দেওয়া হয়েছে যা ওয়েব জগতের সুরক্ষা প্রয়োজনীয়তা, while(1)যখন জেএসওএন প্রতিক্রিয়া যুক্ত করা হয় তবে <script>ট্যাগটিতে এটির অপব্যবহার প্রতিরোধ করে ।


0

প্রমাণীকরণ স্থাপনের পরে, জেএসএন হাইজ্যাকিং সুরক্ষা বিভিন্ন ধরণের রূপ নিতে পারে। গুগল তাদের (1) তাদের JSON ডেটার সাথে সংযুক্ত করে, যাতে কোনও দূষিত স্ক্রিপ্ট যদি এটির মূল্যায়ন করে তবে ক্ষতিকারক স্ক্রিপ্ট একটি অসীম লুপে প্রবেশ করে।

তথ্যসূত্র: ওয়েব সুরক্ষা পরীক্ষার কুকবুক: সমস্যাগুলি দ্রুত খুঁজে পাওয়ার পদ্ধতিগত কৌশল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.