javascript - মানুষ কেন কোড রাখে "নিক্ষেপ 1; জেসন প্রতিক্রিয়াগুলির সামনে<"খারাপ হবে না" এবং "জন্য(;;);"



ajax security (3)

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

গুগল এই রকম জেসনকে ফেরত দেয়:

throw 1; <dont be evil> { foo: bar}

এবং ফেসবুক অ্যাজ্যাক্স জেসনকে এই রকম করেছে:

for(;;); {"error":0,"errorSummary": ""}
  • কেন তারা এমন কোড রাখে যা মৃত্যুদন্ড কার্যকর করবে এবং অবৈধ জসন তৈরি করবে?
  • যদি এটি অবৈধ হয় তবে এটি কীভাবে বিশ্লেষণ করে এবং যদি আপনি এটি খোলার চেষ্টা করেন তবে কীভাবে ক্র্যাশ হবে?
  • তারা শুধু স্ট্রিং থেকে এটি অপসারণ (ব্যয়বহুল মনে হয়)?
  • এই কোন নিরাপত্তা সুবিধার আছে?

নিরাপত্তার উদ্দেশ্যে এটির প্রতিক্রিয়া হিসাবে:

স্ক্র্যাপ অন্য ডোমেনে থাকলে ডেটা পেতে script ট্যাগ ব্যবহার করতে হবে কারণ XHR ক্রস ডোমেনটি কাজ করবে না। এমনকি for(;;); কিভাবে আক্রমণকারী তথ্য পেতে হবে? এটি একটি পরিবর্তনশীল বরাদ্দ করা হয় না তাই এটা শুধু আবর্জনা সংগ্রহ করা হবে না কারণ এটি কোন রেফারেন্স আছে?

মূলত তথ্য ক্রস ডোমেন পেতে তারা করতে হবে

<script src="http://target.com/json.js"></script>

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


Answer #1

এমনকি for(;;); কিভাবে আক্রমণকারী তথ্য পেতে হবে?

আক্রমণগুলি তাদের কন্সট্রাকটর ফাংশন বা তার prototype পরিবর্তিত করে, অন্তর্নির্মিত প্রকারের আচরণ, বিশেষত Object এবং Array আচরণের উপর ভিত্তি করে তৈরি হয়। তারপরে যখন লক্ষ্যযুক্ত JSON একটি {...} বা [...] গঠন করে তখন এটি আক্রমণকারীর সম্ভাব্য-অপ্রত্যাশিত আচরণ সহ সেই বস্তুর নিজস্ব সংস্করণগুলি হবে।

উদাহরণস্বরূপ, আপনি Object মধ্যে একটি সেট্টার-সম্পত্তি হ্যাক করতে পারেন, যা বস্তুর লিখিতগুলিতে লিখিত মানের বিশ্বাসঘাতকতা করবে:

Object.prototype.__defineSetter__('x', function(x) {
    alert('Ha! I steal '+x);
});

তারপরে যখন একটি <script> কিছু JSON এ নির্দেশ করা হয়েছিল যেটি সেই সম্পত্তি নামটি ব্যবহার করেছিল:

{"x": "hello"}

মান "hello" লিক হবে।

অ্যারে এবং আক্ষরিক বস্তু বস্তু বলা সেটার কারণ হতে বিতর্কিত। হাইফাইলে ওয়েব সাইটগুলিতে প্রচারিত আক্রমণের প্রতিক্রিয়ায় ফায়ারফক্স 3.5 সংস্করণে আচরণটি সরিয়ে দিয়েছে। তবে সাফারি (4) এবং ক্রোম (5) লেখার সময় এগুলি এখনো দুর্বল।

এখন যে সমস্ত ব্রাউজারের অনুমতি দেওয়া হয়েছে তা অন্য কনস্ট্রাক্টর ফাংশনগুলিকে পুনরায় সংজ্ঞায়িত করা হয়েছে:

Array= function() {
    alert('I steal '+this);
};

[1, 2, 3]

এবং এখন জন্য, IE8 এর বৈশিষ্ট্যগুলি বাস্তবায়ন (ECMAScript পঞ্চম সংস্করণ মান এবং Object.defineProperty ) বর্তমানে Array.prototype বা Array.prototype কাজ করে না।

তবে পূর্ববর্তী ব্রাউজারগুলি সুরক্ষিত করার পাশাপাশি এটি হতে পারে যে জাভাস্ক্রিপ্টে এক্সটেনশানগুলি ভবিষ্যতে একই ধরণের আরও সম্ভাব্য লিকগুলি সৃষ্টি করে এবং সেই ক্ষেত্রে তাত্ক্ষণিকভাবে তাদের বিরুদ্ধেও সুরক্ষা করা উচিত।


Answer #2

যদি এটি অবৈধ হয় তবে এটি কীভাবে বিশ্লেষণ করে এবং যদি আপনি এটি খোলার চেষ্টা করেন তবে কীভাবে ক্র্যাশ হবে?

এটি এমন একটি বৈশিষ্ট্য যা আপনি এটি eval চেষ্টা করলে ক্র্যাশ করবে। eval arbitary জাভাস্ক্রিপ্ট কোড, যা একটি ক্রস সাইট স্ক্রিপ্টিং আক্রমণ জন্য ব্যবহার করা যাবে অনুমতি দেয়।

তারা শুধু স্ট্রিং থেকে এটি অপসারণ (ব্যয়বহুল মনে হয়)?

আমি তাই কল্পনা। সম্ভবত কিছু ভালো:

function parseJson(json) {
   json = json.replace("throw 1; <dont be evil>", "");
   if (/* regex to validate the JSON */) {
       return eval(json);
   } else {
       throw "XSS";
   }
}

"মন্দ হও না" ক্রাফ্ট ডেভেলপারদেরকে আরও নিরাপদ বিকল্পের পরিবর্তে সরাসরি eval ব্যবহার থেকে বাধা দেয়।


Answer #3

সম্পাদনা

এই স্ট্রিংগুলিকে সাধারণত "অদৃশ্য ক্রুফ্ট" হিসাবে উল্লেখ করা হয় এবং এটি একটি তথ্য ফুটো দুর্বলতা যা JSON স্পেসিফিকেশন প্রভাবিত করে তা প্যাচ করতে ব্যবহার করা হয়। এই আক্রমণটি বাস্তব পৃথিবী এবং jeremiahgrossman.blogspot.com/2006/01/… । মজিলা বিশ্বাস করে যে এটি JSON স্পেসিফিকেশনে একটি দুর্বলতা এবং এটি ফায়ারফক্স 3 এ প্যাচ করা হয়েছে। তবে এই সমস্যাটি এখনও অন্যান্য ব্রাউজারগুলিকে প্রভাবিত করে কারণ এটি একটি সামঞ্জস্যপূর্ণ প্যাচ।

ববিসের উত্তরটি এই আক্রমণের একটি প্রযুক্তিগত ব্যাখ্যা আছে এবং এটি সঠিক।





json