জেএসএন হাইজ্যাক করা কি এখনও আধুনিক ব্রাউজারগুলিতে একটি সমস্যা?


149

আমি ব্যাকবোন.জেএস এবং টর্নেডো ওয়েব সার্ভার ব্যবহার করছি। ব্যাকবনে সংগ্রহের ডেটা পাওয়ার জন্য স্ট্যান্ডার্ড আচরণটি হচ্ছে জেএসএন অ্যারে হিসাবে প্রেরণ করা।

অন্যদিকে, টর্নেডোর স্ট্যান্ডার্ড আচরণটি নিম্নোক্ত দুর্বলতার কারণে জেএসওন অ্যারের অনুমতি না দেওয়া:

http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx

সম্পর্কিত একটি হ'ল: http://haacked.com/archive/2009/06/25/json-hijacking.aspx

আমার জেএসওএন কোনও বস্তুতে সত্যই বস্তুর তালিকায় না জড়িয়ে থাকা আমার পক্ষে আরও স্বাভাবিক মনে হয়।

আমি আধুনিক ব্রাউজারগুলিতে (যেমন বর্তমান ক্রোম, ফায়ারফক্স, সাফারি এবং আই 9) এই আক্রমণগুলি পুনরুত্পাদন করতে অক্ষম ছিল। একই সময়ে আমি আধুনিক ব্রাউজারগুলি এই সমস্যাগুলিকে সম্বোধন করেছে যে কোনও জায়গায় তা নিশ্চিত করতে অক্ষম ছিল।

কোনও সম্ভাব্য দুর্বল প্রোগ্রামিং-দক্ষতা বা দুর্বল গুগলিং-দক্ষতা দ্বারা আমি বিপথগামী না তা নিশ্চিত করতে:

এই JSON হাইজ্যাকিং আক্রমণগুলি এখনও আধুনিক ব্রাউজারগুলিতে একটি সমস্যা?

(দ্রষ্টব্য: এর সম্ভাব্য সদৃশটির জন্য দুঃখিত: আধুনিক ব্রাউজারে 'জেএসএন হাইজ্যাকিং' করা কি সম্ভব? তবে যেহেতু গৃহীত উত্তরটি প্রশ্নের উত্তরটি বলে মনে হচ্ছে না - আমি ভেবেছিলাম এটি আবার জিজ্ঞাসা করার এবং আরও স্পষ্ট ব্যাখ্যা পেতে হবে) ।)


ইওল ব্যবহার করছেন? তবে অন্যথায় সম্ভব না যদি ব্যাকবোন পার্সের প্রতিক্রিয়াতে কোনও কিছু পরিবর্তন বা পরিবর্তিত না করা হয় তবে আপনার নিরাপদ থাকা উচিত
ডিপটেকটনস

10
সাধারণভাবে বলতে গেলে, কেউ কখনও "আধুনিক" ব্রাউজার ব্যবহার করবে বলে এই ধারণা নিয়ে ওয়েব সুরক্ষার কাছে যাওয়া উচিত নয়।
লুক

7
@ লুক - নীচে রেড মন্তব্য দেখুন। সাধারণভাবে দুর্দান্ত বিষয় - তবে আমি সাধারণ সুরক্ষা প্রশ্ন করছি না। (আমার ব্যবহারকারীরা কেবলমাত্র যদি তারা প্রথমে একটি আধুনিক ব্রাউজার ব্যবহার করছেন তবেই প্রমাণীকরণ করতে সক্ষম হবেন))
রকেটম্যান

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

2
@ জেপফু, আপনি কোথায় এমন অনুমান দেখছেন? আমি কেবল কিছুটা ধরেই নিয়েছি যে এই ধরনের অপ্রচলিত সফ্টওয়্যারযুক্ত লোকেরা যাইহোক "অরক্ষিত"। (আমার স্কেটের ব্যয়কে ন্যায্য করার বিষয়ে, আমি ইতিমধ্যে কার্বন স্পিড স্কেটগুলিতে তাদের মূল্যের এক তৃতীয়াংশ রাখার জন্য ব্যবহৃত হয়েছিল যা আমার বর্তমান স্কেটগুলি পরিধান করতে আমাকে নিচ্ছে এমন সময় এক তৃতীয়াংশেরও কম সময়ে জরাজীর্ণ হয়েছিল And এবং যাইহোক, আমি আপনি যদি তাদের চালানোর মতো হয়ে থাকেন তবে এটিই উপযুক্ত বলে মনে করুন, যা আমার ক্ষেত্রে))
ফ্রেডেরিক

উত্তর:


112

না, এটা পাস ক্যাপচার মান আর সম্ভব []বা {}ফায়ারফক্স 21, ক্রোম 27, বা IE 10. মধ্যে কনস্ট্রাকটর একটি ছোট্ট পরীক্ষা পাতা, বর্ণিত মূল আক্রমণের উপর ভিত্তি করে http://www.thespanner.co.uk / 2011/05/30 / জসন-হাইজ্যাকিং / :

( http://jsfiddle.net/ph3Uv/2/ )

var capture = function() {
    var ta = document.querySelector('textarea')
	ta.innerHTML = '';
	ta.appendChild(document.createTextNode("Captured: "+JSON.stringify(arguments)));
	return arguments;
}
var original = Array;

var toggle = document.body.querySelector('input[type="checkbox"]');
var toggleCapture = function() {
    var isOn = toggle.checked;
    window.Array = isOn ? capture : original;
    if (isOn) {
        Object.defineProperty(Object.prototype, 'foo', {set: capture});    
    } else {
        delete Object.prototype.foo;
    }
};
toggle.addEventListener('click', toggleCapture);
toggleCapture();

[].forEach.call(document.body.querySelectorAll('input[type="button"]'), function(el) {
    el.addEventListener('click', function() {
        document.querySelector('textarea').innerHTML = 'Safe.';
        eval(this.value);
    });
});
<div><label><input type="checkbox" checked="checked"> Capture</label></div>
<div><input type="button" value="[1, 2]" /> <input type="button" value="Array(1, 2);" /> <input type="button" value="{foo: 'bar'}" /> <input type="button" value="({}).foo = 'bar';" /></div>
<div><textarea></textarea></div>

এটি সংক্ষিপ্ত এবং দীর্ঘ ফর্মগুলির মাধ্যমে অ্যারে এবং অবজেক্টকে আরম্ভ window.Arrayকরার জন্য একটি সেটারকে ওভাররাইড করে Object.prototype.fooএবং পরীক্ষা করে।

ES4 বৈশিষ্ট , বিভাগ 1.5 এ, বাস্তবায়ন চিহ্ন এবং নোট "বস্তু এবং অ্যারের বিশ্বব্যাপী, মানক বাইন্ডিং বস্তু এবং অ্যারে initializers জন্য নতুন বস্তু গঠনে ব্যবহৃত করা প্রয়োজন" যে "Internet Explorer 6-, অপেরা 9,20 এবং সাফারি 3 Do অবজেক্ট এবং অ্যারের স্থানীয় বা বিশ্বব্যাপী প্রত্যাবর্তনকে সম্মান করবেন না, তবে আসল অবজেক্ট এবং অ্যারে কনস্ট্রাক্টর ব্যবহার করুন। এটি ES5, বিভাগ 11.1.4 এ ধরে রাখা হয়েছে ।

অ্যালেন ওয়ার্ফস-ব্রক ব্যাখ্যা করেছিলেন যে ES5 এছাড়াও নির্দিষ্ট করে যে অবজেক্ট ইনিশিয়ালাইজেশন সেটটারগুলি ট্রিগার করা উচিত নয়, কারণ এটি DefineOwnProperty ব্যবহার করে। এমডিএন: অবজেক্টের সাথে কাজ করে নোট করে যে "জাভাস্ক্রিপ্ট ১.৮.১ থেকে শুরু করে, অবজেক্ট এবং অ্যারে ইনিশিয়ালাইজারে বৈশিষ্ট্য নির্ধারণের সময় সেটটারদের আর বলা হবে না।" এটি ভি 8 ইস্যু 1015 এ সম্বোধন করা হয়েছিল ।


28
২০০৯ সালে ফিরে ব্রেন্ডন আইচ পরামর্শ দিয়েছিল যে ব্রাউজারগুলি অ্যাপ্লিকেশন / জেসন ( bugzilla.mozilla.org/show_bug.cgi?id=376957#c75 ) হিসাবে পরিবেশন করা স্ক্রিপ্টগুলি মূল্যায়ন করে না , যা এখনও আমার কাছে ভাল ধারণা বলে মনে হয়।

2
নোট করুন যে অন্ধ POST সিএসআরএফ এখনও বিশেষত পাঠ্য / প্লেইন এনকোডিং সহ ফর্মগুলি ব্যবহার করে সম্ভব এবং টোকেন / ননস ব্যবহার করে পরাজিত হওয়া দরকার।

1
হ্যাঁ পোস্ট সিএসআরএফ। আপনার দুর্দান্ত তথ্যের জন্য এখানে ধন্যবাদ।
রকেটম্যান

5
আপনার বিবৃতিটি সঠিক যখন এটি কেবল অ্যারে নির্মাতাকে কেবল ওভাররাইটিংয়ের উল্লেখ করে। মাইক্রোসফ্টস আইই এবং এজ এখনও ইউটিএফ -7 জেএসএন হাইজ্যাকিংয়ের পক্ষে ঝুঁকিপূর্ণ। এটি সম্প্রতি পরীক্ষা করা হয়েছে (এবং আজ আবার মজাদার জন্য) এবং এটি এখনও কার্যকর।
ব্যবহারকারী 857990

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