2013-04-29 3 views
112

मैं बैकबोन.जेएस और टोरनाडो वेब सर्वर का उपयोग कर रहा हूं। बैकबोन में संग्रह डेटा प्राप्त करने के लिए मानक व्यवहार एक JSON ऐरे के रूप में भेजना है।क्या JSON हाइजैकिंग अभी भी आधुनिक ब्राउज़र में एक मुद्दा है?

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

इससे संबंधित एक से एक है: http://haacked.com/archive/2009/06/25/json-hijacking.aspx

यह मेरे लिए और अधिक प्राकृतिक महसूस करता है

दूसरी ओर, तूफान के मानक व्यवहार JSON सारणी के निम्न जोखिम की वजह से नहीं अनुमति देने के लिए है ऑब्जेक्ट में मेरी जेएसओएन को लपेटने की ज़रूरत नहीं है जब यह वास्तव में वस्तुओं की एक सूची है।

मैं आधुनिक हमलों (यानी वर्तमान क्रोम, फ़ायरफ़ॉक्स, सफारी, और आईई 9) में इन हमलों को पुन: उत्पन्न करने में असमर्थ था। साथ ही मैं कहीं भी पुष्टि करने में असमर्थ था कि आधुनिक ब्राउज़र ने इन मुद्दों को संबोधित किया था।

सुनिश्चित करने के लिए है कि मैं किसी भी संभावित गरीब प्रोग्रामिंग-कौशल है और न ही गरीब Googling-कौशल द्वारा गुमराह नहीं कर रहा हूँ:

इन JSON अपहरण हमलों अभी भी आधुनिक ब्राउज़रों में एक मुद्दा आज कर रहे हैं?

(नोट: करने के लिए संभव डुप्लिकेट के लिए खेद है:। Is it possible to do 'JSON hijacking' on modern browser? लेकिन जब से स्वीकार किए जाते हैं जवाब सवाल का जवाब नहीं लगता है - मैंने सोचा कि यह इसे फिर से पूछने के लिए और कुछ स्पष्ट स्पष्टीकरण प्राप्त करने के लिए समय आ गया है)

+0

eval का उपयोग कर? फिर अन्यथा संभव नहीं। अगर बैकबोन पार्स प्रतिक्रिया में कुछ भी नहीं बदला गया है या बदला गया है तो आपको सुरक्षित होना चाहिए – Deeptechtons

+6

आम तौर पर, आपको कभी भी इस बात के साथ वेब सुरक्षा से संपर्क नहीं करना चाहिए कि कोई "आधुनिक" ब्राउज़र का उपयोग करने जा रहा है। – Luke

+5

@Luke - रीड पर टिप्पणी के नीचे देखें। सामान्य रूप से महान बिंदु - लेकिन मैं एक सामान्य सुरक्षा प्रश्न नहीं पूछ रहा हूं। (मेरे उपयोगकर्ता केवल पहले ही एक आधुनिक ब्राउज़र का उपयोग कर रहे हैं तो प्रमाणित करने में सक्षम होंगे।) – Rocketman

उत्तर

81

नहीं , यह अब संभव नहीं है फ़ायरफ़ॉक्स 21, क्रोम 27, या IE 10 में [] या {} कंस्ट्रक्टर्स के लिए पारित मान कैप्चर करने के लिए यहां एक छोटे से परीक्षण पृष्ठ, http://www.thespanner.co.uk/2011/05/30/json-hijacking/ में वर्णित मुख्य हमलों पर आधारित है:

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

यह window.Array ओवरराइड करता है और Object.prototype.foo पर एक सेटटर जोड़ता है और छोटे और लंबे रूपों के माध्यम से सरणी और वस्तुओं को प्रारंभ करने का परीक्षण करता है।

ES4 spec, धारा 1.5 में, "वस्तु और सरणी प्रारंभकर्ताओं के लिए नई वस्तुओं का निर्माण करने के लिए ऑब्जेक्ट और ऐरे के वैश्विक, मानक बाइंडिंग की आवश्यकता होती है" और कार्यान्वयन उदाहरण में नोट्स "इंटरनेट एक्सप्लोरर 6, ओपेरा 9.20, और सफारी 3 ऑब्जेक्ट और ऐरे के स्थानीय या वैश्विक रिबिंडिंग का सम्मान नहीं करते हैं, लेकिन मूल ऑब्जेक्ट और ऐरे कन्स्ट्रक्टर का उपयोग करते हैं। " यह ES5, section 11.1.4 में रखा गया है।

Allen Wirfs-Brock explained कि ईएस 5 यह भी निर्दिष्ट करता है कि ऑब्जेक्ट प्रारंभिक को सेटर्स को ट्रिगर नहीं करना चाहिए, क्योंकि यह DefineOwnProperty का उपयोग करता है। MDN: Working with Objects नोट करता है कि "जावास्क्रिप्ट 1.8.1 में शुरू हो रहा है, ऑब्जेक्ट्स और सरणी प्रारंभकर्ताओं में गुणों को सेट करते समय सेटर्स को अब नहीं कहा जाता है।" इसे V8 issue 1015 में संबोधित किया गया था।

+18

200 9 में ब्रेंडन ईच ने सुझाव दिया कि ब्राउज़र एप्लिकेशन/जेसन (https://bugzilla.mozilla.org/show_bug.cgi?id=376957#c75) के रूप में कार्यरत स्क्रिप्ट का मूल्यांकन नहीं करते हैं, जो अभी भी मेरे लिए एक अच्छा विचार है। –

+2

ध्यान दें कि अंधा पोस्ट सीएसआरएफ अभी भी फॉर्म का उपयोग कर संभव है, विशेष रूप से टेक्स्ट/सादा एन्कोडिंग के साथ, और टोकन/nonces का उपयोग करके पराजित करने की आवश्यकता है। –

+1

पोस्ट सीएसआरएफ के लिए हाँ। यहां आपकी सभी बेहतरीन जानकारी के लिए धन्यवाद। – Rocketman

संबंधित मुद्दे