2016-08-10 6 views
5

में मैं एक json स्ट्रिंग deserializing के लिए Newtonsoft.Json उपयोग कर रहा हूँ, लेकिन मज़बूत शिकायत की कि मैं अमान्य json उपयोग कर रहा हूँ। मैं तो एक चेक Newtonsoft.Json.Schema का उपयोग कर जोड़ा है, लेकिन यह अब भी अधिकमज़बूत Json इंजेक्शन नेट

var schema = JsonSchema.Parse(JsonConvert.SerializeObject(typeof(T))); 
JToken token = JArray.Parse(json); -- Vulnerability 
IList<string> errors; 
if (token.IsValid(schema, out errors)) 
{ 
    return JsonConvert.DeserializeObject<T>(json); -- Vulnerability 
} 

JSON स्ट्रिंग कैसे मान्य करने के लिए पर कोई सलाह की शिकायत?

लाइन 23 पर, विधि DeserializeObject() JSON में अनधिकृत इनपुट लिखता है। यह कॉल हमलावर को पर जेएसओएन इकाई में मनमानी तत्वों या विशेषताओं को इंजेक्ट करने की अनुमति दे सकती है।

+1

परिभाषित 'complains' है। क्या आपके पास अपवाद या त्रुटि संदेश है? – Igor

+4

[इस है कि वे किस तरह रोल, मैं मज़बूत बंद कर देते हैं और आगे बढ़ने था] (http://i.stack.imgur.com/K0v6i.png) – Will

+0

कृपया, मज़बूत – oldbam

उत्तर

6

देर से प्रतिक्रिया के लिए माफ़ी, मैं दृढ़ता से सुधार/धोखा देने में कामयाब रहा। यहाँ ठीक

byte[] jsonBytes = Encoding.UTF8.GetBytes(json); 
using (var stream = new MemoryStream(jsonBytes)) 
{ 
    output = Deserialize<List<T>>(stream); 
} 

public TResult Deserialize<TResult>(Stream responseStream) 
    { 
     using (var sr = new StreamReader(responseStream)) 
     { 
      using (var reader = new JsonTextReader(sr)) 
      { 
       var serializer = new JsonSerializer 
       { 
        MissingMemberHandling = 
         EnforceMissingMemberHandling ? MissingMemberHandling.Error : MissingMemberHandling.Ignore, 
        NullValueHandling = IgnoreNullValues ? NullValueHandling.Ignore : NullValueHandling.Include 
       }; 

       return serializer.Deserialize<TResult>(reader); 
      } 
     } 
    } 

आशा इस कोई मदद करता है

+0

कुछ स्पष्टीकरण अच्छा होगा। – shmosel

3

यह आपके मामले में मज़बूत शिकायत है कि आप अविश्वसनीय स्रोत से json का उपयोग की तरह दिखता है, यह क्या Fortify documentation में कहा जाता है:

JSON दस्तावेज़ और संदेशों के अर्थ विज्ञान यदि कोई अनुप्रयोग निर्माणों बदला जा सकता है अनधिकृत इनपुट से जेएसओएन। एक अपेक्षाकृत सौम्य मामले में, एक हमलावर बाहरी तत्वों को सम्मिलित करने में सक्षम हो सकता है जो एक JSON दस्तावेज़ या अनुरोध को पार्स करते समय एक अपवाद फेंकने का कारण बनता है। एक और गंभीर मामले में, जैसे कि JSON इंजेक्शन से जुड़ा हुआ, एक हमलावर अपरिपक्व तत्वों को सम्मिलित करने में सक्षम हो सकता है जो किसी JSON दस्तावेज़ या अनुरोध के भीतर व्यावसायिक महत्वपूर्ण मूल्यों के अनुमानित हेरफेर की अनुमति देता है।

यदि आपको अपनी वेब सेवा से json प्राप्त होता है, तो आप शायद फोर्टिफ़ी की चेतावनी को नजरअंदाज कर सकते हैं। हालांकि, ध्यान रखें कि आप इनपुट पर JArray.Parse() पर कॉल कर रहे हैं और मान लें कि यह एक वैध सरणी होगी, लेकिन यदि ऐसा नहीं है, तो आपको JsonReaderException मिल जाएगा। साथ ही, आप अपने JSON को स्कीमा के विरुद्ध वास्तव में मान्य नहीं करते हैं, कृपया JSON स्कीमा निर्दिष्ट करने के तरीके को देखने के लिए JSON.NET example देखें।

ईमानदारी से कहूं तो मैं कैसे मज़बूत एक JSON कुछ तृतीय-पक्ष वेब सेवा से प्राप्त मान्य करने के लिए उम्मीद करेंगे अपने आप को पता करने के लिए दिलचस्पी होगी।