ajax - একটি 'অ্যাজ্যাক্স কল প্রতিক্রিয়ার মত'(for;);{জসন তথ্য} মানে?




json facebook (4)

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

এই অসীম loops "জাভাস্ক্রিপ্ট হাইজ্যাকিং" বিরুদ্ধে একটি countermeasure হয়, জিম্মি গ্রসম্যান দ্বারা প্রকাশিত হয় যে জিমেইল উপর আক্রমণ সঙ্গে জনসাধারণের মনোযোগ অর্জন একটি ধরনের আক্রমণ।

ধারণাটি সুন্দর হিসাবে সহজ: অনেক ব্যবহারকারী জিমেইল বা ফেসবুকে স্থায়ীভাবে লগ ইন করতে থাকে। সুতরাং আপনি কি করেন আপনি একটি সাইট সেট আপ করেন এবং আপনার দূষিত সাইটের জাভাস্ক্রিপ্টে আপনি বস্তু বা অ্যারে কন্সট্রাকটরকে ওভাররাইড করেন:

function Object() {
    //Make an Ajax request to your malicious site exposing the object data
}

তারপরে আপনি সেই সাইটের মধ্যে একটি <script> ট্যাগ অন্তর্ভুক্ত করুন

<script src="http://www.example.com/object.json"></script>

এবং পরিশেষে আপনি আপনার দূষিত সার্ভারের লগগুলিতে JSON অবজেক্টগুলি সম্পর্কে সব পড়তে পারেন।

প্রতিশ্রুতি অনুযায়ী, paper লিঙ্ক।

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

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

এই কল এবং প্রতিক্রিয়া:

GET http://0.131.channel.facebook.com/x/1476579705/51033089/false/p_1524926084=0

প্রতিক্রিয়া:

for (;;);{"t":"continue"}

আমি প্রাথমিক কারণ এটি নিয়ন্ত্রণ আছে সন্দেহ। এটি আপনাকে AJON এর মাধ্যমে ডেটা পুনরুদ্ধার করতে বাধ্য করে, যা JSON-P বা অনুরূপ নয় (যা script ট্যাগগুলি ব্যবহার করে এবং তাই ব্যর্থ হয় কারণ লুপটি অসীম), এবং এভাবে নিশ্চিত করে যে একই মূল নীতিটি কিক্স করে। এটি তাদের নিয়ন্ত্রণ করতে দেয় কোন দলিলগুলি API এ কলগুলি জারি করতে পারে - বিশেষ করে, শুধুমাত্র এমন ডকুমেন্ট যা একই API গুলির সাথে একই API আছে, অথবা এমন একটি যা ফেসবুক বিশেষভাবে CORS (CORS সমর্থনকারী ব্রাউজারগুলিতে) অ্যাক্সেসের অনুমতি দেয়। সুতরাং আপনাকে এমন একটি পদ্ধতির মাধ্যমে ডেটা অনুরোধ করতে হবে যেখানে ব্রাউজার SOP প্রয়োগ করবে, এবং আপনাকে সেই প্রিফেস সম্পর্কে জানাতে হবে এবং ডেটা deserializing আগে এটি অপসারণ করতে হবে।

তাই হ্যাঁ, এটি যে তথ্য অ্যাক্সেসিং (দরকারী) অ্যাক্সেস সম্পর্কে।


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

এই চ্যালেঞ্জটির মুখোমুখি হতে ফেসবুক সম্প্রতি অভ্যন্তরীণ প্রকল্পগুলির সাথে "সমস্ত আউট" যাচ্ছে যা এই সর্বোত্তম অনুশীলনগুলিকে চিত্তাকর্ষকভাবে প্রয়োগ করার জন্য ডিজাইন করা হয়েছে এবং সৎ হতে শুধুমাত্র একমাত্র ব্যাখ্যা যা এই নির্দিষ্ট ক্ষেত্রে সত্যিকার অর্থেই বোঝায় সেটি হল: কেউ অভ্যন্তরীণভাবে সিদ্ধান্ত নিয়েছে যে সমস্ত JSON পার্সিং তাদের মূল লাইব্রেরিতে একক প্রয়োগের মাধ্যমে যেতে হবে এবং এটি কার্যকর করার সেরা for(;;); স্বয়ংক্রিয়ভাবে সম্মুখের tacked।

এভাবে, একজন বিকাশকারী "অলস" হতে পারে না: তারা যদি eval() ব্যবহার করে, তা হলে তা অবিলম্বে লক্ষ্য করে দেখবে এবং তাদের ভুলটি বুঝতে এবং অনুমোদিত JSON API ব্যবহার করে।

প্রদান করা অন্যান্য উত্তর দুটি বিভাগের মধ্যে একটি মধ্যে পড়ে বলে মনে হচ্ছে:

  1. ভুল বোঝাবুঝি JSONP, অথবা
  2. ভুল বোঝাবুঝি "JSON হাইজ্যাকিং"।

প্রথম বিভাগের লোকেরা এই ধারণাটির উপর নির্ভর করে যে কোনও আক্রমণকারী কোনও উপায়ে একটি API এ "JSONP ব্যবহার করে" একটি অনুরোধ করতে পারে যা এটি সমর্থন করে না। JSONP একটি প্রোটোকল যা সার্ভার এবং ক্লায়েন্ট উভয়ের পক্ষে সমর্থিত হওয়া আবশ্যক: এটি সার্ভারের জন্য আমার myFunction({"t":"continue"}) মতো কিছু ফেরত দিতে হবে যাতে ফলাফল স্থানীয় ক্রিয়াকলাপে প্রেরিত হয়। আপনি শুধু দুর্ঘটনা দ্বারা "JSONP ব্যবহার করতে পারেন না"।

দ্বিতীয় বিভাগের যারা একটি খুব বাস্তব দুর্বলতা উদ্ধৃত করছে যা "JSON হাইজ্যাকিং" এর ফর্মটিকে অনুমতি দেওয়ার জন্য JSONP (যেমন এটি একটি) ব্যবহার করে না এমন API গুলিতে ট্যাগগুলির মাধ্যমে একটি ক্রস সাইট অনুরোধ জালিয়াতি করার অনুমতি দেওয়া হয়েছে বলে বর্ণনা করা হয়েছে। এটি অ্যারে / অবজেক্ট কনস্ট্রাকটরটি পরিবর্তন করে সম্পন্ন করা হয়, যা কোনও মোড়ানো ফাংশন ছাড়াই সার্ভার থেকে প্রাপ্ত তথ্য অ্যাক্সেস করতে দেয়।

যাইহোক, এই ক্ষেত্রে এটি সহজভাবে সম্ভব নয়: এটি যেভাবে কাজ করে সেটি হল একটি বেয়ার অ্যারে (বিখ্যাত JSML API যেমন অনেক JSON APIs এর সম্ভাব্য ফলাফল) একটি বৈধ অভিব্যক্তি বিবৃতি, যা সত্য নয় বেয়ার বস্তু।

প্রকৃতপক্ষে, JSON দ্বারা নির্ধারিত বস্তুর সিনট্যাক্স (যার মধ্যে ক্ষেত্রের নামের কাছাকাছি উদ্ধৃতি চিহ্ন রয়েছে, যেমন এই উদাহরণে দেখানো হয়েছে) ব্লকগুলির সিনট্যাক্সের সাথে দ্বন্দ্ব করে এবং তাই স্ক্রিপ্টের শীর্ষ স্তরে ব্যবহার করা যাবে না।

js> {"t":"continue"}
typein:2: SyntaxError: invalid label:
typein:2: {"t":"continue"}
typein:2: ....^

অবজেক্ট () কনস্ট্রাক্টর রিম্যাপিংয়ের মাধ্যমে এই উদাহরণটি শোষণযোগ্য হওয়ার জন্য, এটি API কে পরিবর্তে বৈধ JavaScript (কিন্তু তারপর বৈধ JSON) তৈরি করে বন্ধনীটির একটি সেটের ভিতরে বস্তুটি ফেরত দেওয়ার প্রয়োজন হবে না।

js> ({"t":"continue"})
[object Object]

এখন, এটি যে হতে পারে for(;;); প্রিফিক্স ট্রিক কেবল এই উদাহরণে "আপাতদৃষ্টিতে" দেখানো হচ্ছে এবং আসলে অন্য অভ্যন্তরীণ ফেসবুক API দ্বারা ফেরত আনা হচ্ছে যা অ্যারে ফেরত এসেছে; কিন্তু এই ক্ষেত্রে যে সত্যিই উল্লেখ করা উচিত, যে কেন তারপর for(;;); " for(;;); " কেন "বাস্তব" কারণ হতে হবে for(;;); এই নির্দিষ্ট স্নিপেট প্রদর্শিত হয়।


ভাল for(;;); একটি অসীম লুপ (যদি আপনি চান তবে ট্যাবটিতে যে কোডটি চালানোর জন্য আপনি ক্রোমের JavaScript কনসোল ব্যবহার করতে পারেন এবং তারপর টাস্ক ম্যানেজারে CPU-ব্যবহারটি ঘরের ছাদে যেতে না হওয়া পর্যন্ত ব্রাউজারটি ব্যবহার করে দেখুন)।

তাই আমি সন্দেহ করি যে eval বা অন্য কোন কৌশল ব্যবহার করে প্রতিক্রিয়া বিশ্লেষণ করার চেষ্টা করে এমন কেউ হতাশার জন্য এটি সেখানে eval

আরও ব্যাখ্যা করার জন্য, এটি JavaScript এর eval() ফাংশন ব্যবহার করে কিছুটা করে JSON- বিন্যস্ত ডেটা বিশ্লেষণ করতে মোটামুটি সাধারণ বলে মনে হয়:

var parsedJson = eval('(' + jsonString + ')') ;

... এটি কোনও কারণে আপনার নিরাপদ JSON- বিন্যস্ত ডেটা JSON- বিন্যস্ত ডেটা পরিবর্তে (বা এর সাথে) এক্সিকিউটেবল জাভাস্ক্রিপ্ট কোড ধারণ করে তবে সেই কোড eval() দ্বারা কার্যকর করা হবে। এর মানে হল যে আপনি যদি অবিশ্বাসী সার্ভারের সাথে কথা বলেন, অথবা যদি কোনও বিশ্বস্ত সার্ভারের সাথে আপোস করে তবে তারা আপনার পৃষ্ঠাতে নির্বিচারে কোড চালাতে পারে।

এই কারণে, JSON- বিন্যস্ত ডেটা বিশ্লেষণ করার জন্য eval() মত জিনিসগুলি ব্যবহার করে সাধারণত, এবং for(;;); ফেইসবুক JSON এর বিবৃতিতে মানুষকে এই ভাবে তথ্য বিশ্লেষণ করা থেকে বিরত রাখা হবে। যে কেউ চেষ্টা করে একটি অসীম লুপ পাবেন। তাই মূলত, এটি ফেসবুকের মতই তাদের লোকেরা এপিআইয়ের সাথে কাজ করে এমনভাবে প্রয়োগ করার চেষ্টা করছে যা তাদের ভবিষ্যত শোষণের জন্য ঝুঁকিপূর্ণ করে না যা ফেসবুক API কে হাইক্যাক করার চেষ্টা করে যা একটি ভেক্টর হিসাবে ব্যবহার করে।







facebook