2009-02-18 15 views
7

JSON आपको AJAX कॉल से retrieve data in multiple formats पर अनुमति देता है। उदाहरण के लिए:jQuery के साथ JSON डेटा सुरक्षित है?

$.get(sourceUrl, data, callBack, 'json'); 

हो और sourceUrl से JSON कोड पार्स करने के लिए इस्तेमाल किया जा सकता।

JSON डेटा का वर्णन करने के लिए उपयोग किया जाने वाला बस जावास्क्रिप्ट कोड है। डेटा संरचना को वापस पाने के लिए इसे जावास्क्रिप्ट दुभाषिया द्वारा बेचा जा सकता है।

रिमोट स्रोतों से कोड का मूल्यांकन करना आम तौर पर एक बुरा विचार है। मुझे पता है कि जेएसओएन स्पेक विशेष रूप से फ़ंक्शन घोषणाओं की अनुमति नहीं देता है, लेकिन कोई कारण नहीं है कि आप कोड में शामिल नहीं कर सकते हैं और एक असुरक्षित और निष्पक्ष उपभोक्ता संकलन/कोड निष्पादित कर सकते हैं।

jQuery कैसे पार्सिंग को संभालता है? क्या यह इस कोड का मूल्यांकन करता है? किसी को sourceUrl हैकिंग से रोकने और दुर्भावनापूर्ण कोड वितरित करने से रोकने के लिए कौन से सुरक्षा उपाय हैं?

उत्तर

7

पिछली बार मैंने देखा (देर से 2008) JQuery कार्यों मिल() getJSON() आदि आंतरिक रूप से JSON स्ट्रिंग eval और इतने eval के रूप में ही सुरक्षा समस्या के संपर्क में हैं।

इसलिए किसी भी रूप में eval() का उपयोग करने से पहले JSON स्ट्रिंग को मान्य करने के लिए JSON स्ट्रिंग को मान्य करने के लिए यह बहुत अच्छा विचार है कि यह किसी भी रूप में eval() का उपयोग करने से पहले कोई डोडी गैर-JSON जावास्क्रिप्ट कोड नहीं है।

आप https://github.com/douglascrockford/JSON-js/blob/master/json2.js पर ऐसा फ़ंक्शन पा सकते हैं।

इस क्षेत्र की अच्छी चर्चा के लिए JSON and Broswer Security देखें।

संक्षेप में, इनपुट JSON (उपरोक्त लिंक किए गए फ़ंक्शन या इसी तरह का उपयोग करके) को पार्स किए बिना JQuery के JSON फ़ंक्शंस का उपयोग करके 100% सुरक्षित नहीं है।

एनबी: पार्स की इस तरह अभी भी getJSON से अनुपलब्ध है, तो (हाल ही में जोड़ा गया हो सकता है) यह क्रॉस-डोमेन क्षमता की वजह से इस जोखिम को समझने के लिए और भी अधिक महत्वपूर्ण है JQuery संदर्भ डॉक्स से:

jQuery 1.2 के रूप में, आप किसी अन्य डोमेन पर स्थित JSON डेटा लोड कर सकते हैं यदि आप एक JSONP कॉलबैक निर्दिष्ट करते हैं, जो ऐसा हो सकता है: "myurl? Callback =?"। jQuery स्वचालित रूप से बदल देता है? सही विधि नाम के साथ कॉल करने के लिए, अपने निर्दिष्ट कॉलबैक को कॉल करना।

+0

मेरा मानना ​​है कि ओयू को अब इसके लिए http://www.json.org/json2.js का उपयोग करना चाहिए - मुझे यकीन नहीं है कि जेसन 2 में हुए सटीक अपडेट्स हैं, लेकिन मुझे पता है कि यह गलती से ओवरराइडिंग से बच जाएगा जेएसओएन एपीआई के मूल ब्राउज़र कार्यान्वयन (शायद मूल ने इसे रोका नहीं है?) – olliej

+0

टिप के लिए धन्यवाद, मैंने लिंक अपडेट किया है। – Ash

+0

मुझे समझ में नहीं आता कि यह क्यों है "jQuery.getJSON()" का उपयोग करते समय भी और भी महत्वपूर्ण है। दोनों तरीके जावास्क्रिप्ट कोड निष्पादित कर रहे हैं, और दोनों तरीकों के तरीकों को स्वच्छ किया जाना चाहिए। कॉलबैक के साथ getJSON() का उपयोग करते समय यह आमतौर पर किसी अन्य डोमेन से होता है, इसलिए आपके पास JSON के sanitization पर कोई नियंत्रण नहीं है। –

0

सभी ब्राउज़रों को मैं अजाक्स के माध्यम से अक्षम क्रॉस-साइट अनुरोधों के बारे में जानता हूं। यही है, यदि आपका पृष्ठ my.example.com पर बैठता है, तो आप अजाक्स का उपयोग करके कुछ भी लोड नहीं कर सकते हैं जब तक कि उसका यूआरएल my.example.com पर भी न हो।

यह वास्तव में एक उपद्रव का कुछ हो सकता है, और हमलावर के अन्य तरीकों से स्रोत इंजेक्ट करने के तरीके हैं, लेकिन जाहिर है कि इस प्रतिबंध का उल्लेख आपके द्वारा उल्लेख की जाने वाली चिंता का समाधान करने के लिए किया गया है।

2

$.getJSON() निष्पादित करने के लिए उपयोग किया जाता है (eval का उपयोग करने के बजाय) दूरस्थ स्रोतों से जावास्क्रिप्ट कोड (जेएसओएनपी मुहावरे का उपयोग करके कॉलबैक निर्दिष्ट किया जाता है)। इस विधि का उपयोग करते समय, स्रोत पर भरोसा करने के लिए यह पूरी तरह से आपके ऊपर है, क्योंकि उनके पास आपके पूरे पृष्ठ पर नियंत्रण होगा (वे कुकीज़ को भी भेज सकते हैं)।

तो स्क्रिप्ट का उपयोग और अपनी कुकीज़ का उपयोग कर सकते हैं:

के बारे में स्क्रिप्ट टैग हैक (jsonp) Douglas Crockford साइट से

। यह उपयोगकर्ता के प्रमाणीकरण का उपयोग कर मूल सर्वर तक पहुंच सकता है। यह डीओएम और जावास्क्रिप्ट वैश्विक ऑब्जेक्ट का निरीक्षण कर सकता है, और दुनिया में कहीं भी कोई भी जानकारी भेजता है। स्क्रिप्ट टैग हैक सुरक्षित नहीं है और इससे बचा जाना चाहिए।

1

दोनों IE 8 और Firefox 3.1, देशी JSON समर्थन करना होगा जो eval के लिए एक सुरक्षित विकल्प प्रदान करेगा()। मैं अन्य ब्राउज़रों को सूट का पालन करने की उम्मीद करता हूं। मैं यह भी उम्मीद करता हूं कि jQuery इन मूल तरीकों का उपयोग करने के लिए अपने कार्यान्वयन को बदलने के लिए।

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