2016-08-10 9 views
5

Я использую Newtonsoft.Json для десериализации строки json, но fortify жаловался, что я использую unvalidated json. Затем я добавил проверку с помощью Newtonsoft.Json.Schema, но теперь он жалуется еще большеУкрепить Json Injection в .NET

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. Этот вызов может позволить злоумышленнику вводить произвольные элементы или атрибуты в объект JSON.

+1

Define 'complains'. У вас есть сообщение об исключении или ошибке? – Igor

+4

[Если это так, как они рулон, я бы повернул Fortify и переехал] (http://i.stack.imgur.com/K0v6i.png) – Will

+0

, пожалуйста, обновите свой вопрос с точным сообщением об ошибке, созданным Fortify – 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

Похоже, в вашем случае Fortify жалуется, что вы используете json из ненадежного источника, это то, что сказано в Fortify documentation:

Семантика JSON документов и сообщений может быть изменена, если конструкты приложения JSON из неутвержденного ввода. В относительно доброкачественном случае злоумышленник может вставлять посторонние элементы, которые заставляют приложение генерировать исключение при разборе документа JSON или запроса. В более серьезном случае, например, с использованием инъекции JSON, злоумышленник может вставлять посторонние элементы, которые позволяют предсказуемую манипуляцию критическими для бизнеса значениями в документе или запросе JSON.

Если вы получили json из веб-службы, которой владеете, вы можете, вероятно, отказаться от предупреждения Fortify. Однако имейте в виду, что вы вызываете JArray.Parse() на вход и предположите, что он будет действительным массивом, но если это не так, вы получите JsonReaderException. Кроме того, вы действительно не проверяете JSON на схему, пожалуйста, см. JSON.NET example, чтобы узнать, как указать схему JSON.

Чтобы быть честным, мне было бы интересно узнать, как Fortify ожидает, что один из них будет проверять JSON, полученный от стороннего веб-сервиса.

 Смежные вопросы

  • Нет связанных вопросов^_^