2010-08-05 11 views
5

मैंने कई पदों को देखा है और यह निर्धारित करने में सफल नहीं हुआ है कि मेरी एएसएमएक्स वेब सेवा से आने वाली प्रतिक्रिया में अजीब डी से कैसे छुटकारा पाना है, जैसे {"डी": { "प्रतिक्रिया": "ठीक है", "प्रमाणीकरण कुंजी": "JKPYZFZU"}}।जेसन एएसएमएक्स और वह पस्की डी:

यह शब्दकोश वस्तु को वापस लौटकर मेरी कक्षा 'सार्वजनिक शब्दकोश उपयोगकर्ताडिवाइस' द्वारा बनाया जा रहा है।

अगर मैं लापरवाही की बात सिर्फ डी ऑब्जेक्ट में नहीं रखूंगा तो मैं पूरी तरह से खुश रहूंगा!

उत्तर

1

आप शायद कुछ प्रकार के ढांचे का उपयोग कर रहे हैं जो स्वचालित रूप से डी तत्व के साथ आपकी वेब सेवा जेसन प्रतिक्रियाओं को लपेटता है।

मुझे पता है कि माइक्रोसॉफ्ट के JSON serializer सर्वर की तरफ डी जोड़ता है, और क्लाइंट-साइड AJAX कोड जो JSON स्ट्रिंग को deserializes यह उम्मीद है कि यह वहां होगा।
मुझे लगता है कि jQuery भी इस तरह से काम करता है।

आप Rick Strahl's blog

पर इस बारे में थोड़ा और पढ़ सकते हैं और एक तरह से आप शुद्ध json वापस जाने के लिए के लिए ('प' तत्व के बिना) WCF "Raw" programming model.

+0

पीआईए, लेकिन मुझे यह मार्ग जाना होगा! –

+0

मुझे लगता है कि यह यहां बेवकूफ है, लेकिन 'पीआईए' क्या है? :) – gillyb

+0

गधे में दर्द! कभी-कभी पीआईटीए के रूप में जाना जाता है। –

7

मूल रूप से JSON सारणी अंकन का उपयोग ['hello'] मान्य नहीं है जावास्क्रिप्ट स्वयं ही जबकि JSON ऑब्जेक्ट नोटेशन {'d': ['hello'] } स्वयं मान्य जावास्क्रिप्ट नहीं है। इसने सरणी नोटेशन निष्पादन योग्य होने का परिणाम दिया है जो एक्सएसएस हमलों की संभावना को खोलता है। डिफ़ॉल्ट रूप से किसी ऑब्जेक्ट में अपना डेटा लपेटकर इसे रोकने में मदद मिलती है।

आप post by Dave Ward में क्यों हैं इसके बारे में अधिक पढ़ सकते हैं। (संपादित: के रूप में @ user1334007 से कहा, क्रोम इस साइट असुरक्षित के रूप में अब टैग)

उस लेख पर डेव रीड द्वारा एक टिप्पणी विशेष रूप से बताए है:

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

यह क्या करता है JSON प्रतिक्रिया को XSS हमले के परिणामस्वरूप निष्पादित थोक होने से रोकता है। इस तरह के हमले में, हमलावर एक स्क्रिप्ट तत्व डाल सकता है जो एक JSON webservice, को किसी एक अलग डोमेन पर भी कॉल करता है, क्योंकि स्क्रिप्ट टैग इसका समर्थन करते हैं। और, चूंकि यह बाद में एक स्क्रिप्ट टैग है, अगर प्रतिक्रिया जावास्क्रिप्ट की तरह दिखती है तो यह जावास्क्रिप्ट के रूप में निष्पादित होगी। एक ही एक्सएसएस हमला ऑब्जेक्ट या सरणी कन्स्ट्रक्टर (अन्य संभावनाओं के बीच) को अधिभारित कर सकता है और इस प्रकार अन्य डोमेन से उस JSON डेटा तक पहुंच प्राप्त हो सकती है। किसी भी साइट करना होगा, (2) एक JSON वेब सेवा है कि एक GET अनुरोध पर एक वांछित पेलोड रिटर्न (जैसे बैंक -

सफलतापूर्वक कि पुल बंद करने के लिए, आप (1) एक XSS चपेट साइट (good.com) की जरूरत है .com/getaccounts), (3) बुरा स्थान (evil.com) जिस पर आप बैंक.com से प्राप्त डेटा भेजते हैं, जबकि लोग good.com पर जाते हैं, (4) good.com पर एक दुर्भाग्यपूर्ण विज़िटर बस बैंक में लॉग इन किया गया।कॉम उसी ब्राउज़र सत्र का उपयोग कर।

वैध JSavascript लौटने से आपकी JSON सेवा को सुरक्षित करना केवल एक चीज है जिसे आप इसे रोकने के लिए कर सकते हैं। GET को अस्वीकार करना एक और है (स्क्रिप्ट टैग हमेशा प्राप्त करते हैं)। एक निश्चित HTTP शीर्षलेख की आवश्यकता अन्य है (स्क्रिप्ट टैग कस्टम हेडर या मान सेट नहीं कर सकते हैं)। एएसपी.NET AJAX में webservice स्टैक इन सभी को करता है। कोई भी अपना स्वयं का ढेर बनाने के लिए सावधान रहना चाहिए।

+1

आपकी समय पर प्रतिक्रिया के लिए धन्यवाद! पता नहीं क्यों मुझे वह लेख नहीं मिला। दुर्भाग्य से मैं ऐसे डिवाइस से संचार कर रहा हूं जो ब्राउज़र नहीं है इसलिए हमलों के लिए कमजोर नहीं है। बहुत खराब माइक्रोसॉफ्ट ने हमें उनके 'सहायक' समाधान के आसपास एक आसान तरीका नहीं दिया। –

+2

विडंबना यह है कि उस साइट को क्रोम द्वारा मैलवेयर से भरा हुआ टैग किया गया है। – d512

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