2016-08-10 2 views
5

json 문자열을 비 직렬화하기 위해 Newtonsoft.Json을 사용하고 있지만 유효하지 않은 json을 사용하고 있다고 불평했습니다. 나는 다음 Newtonsoft.Json.Schema를 사용하여 검사를 추가했지만 지금은 JSON 문자열을 확인하는 방법에 대한 더.NET에서 Fortify 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 
} 

어떤 조언을 불평?

라인의 23, DeserializeObject() 메서드는 JSON에 입력을 보냅니다. 이 호출은 공격자가 에게 임의의 요소 나 속성을 JSON 엔티티에 삽입하도록 허용 할 수 있습니다.

+1

정의'complains'을하는 데 도움이

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); } } } 

희망은 수정에게 있습니다. 예외 또는 오류 메시지가 있습니까? – Igor

+4

[이것이 어떻게 굴러가는 지 모르겠다면 요새화를 해제하고 계속 진행] (http://i.stack.imgur.com/K0v6i.png) – Will

+0

요새화가 생성 한 정확한 오류 메시지로 질문을 업데이트하십시오 – oldbam

답변

6

늦게 응답에 대한 사과, 나는 그럭저럭 고치거나 속일 수 있었다. 다음은이 사람에게

+0

약간의 설명이 좋을 것입니다. – shmosel

3
그것은 포티 당신이 신뢰할 수없는 소스에서 json를 사용하는 것이 불평 귀하의 경우처럼 보이는

,이 Fortify documentation 말했다 무엇이다 : JSON 문서와 메시지의

의미 체계가 응용 프로그램 구조 경우 변경 될 수 있습니다 유효성이 확인되지 않은 입력의 JSON입니다. 상대적으로 양성 인 경우 공격자가 JSON 문서 또는 요청을 구문 분석하는 동안 응용 프로그램이 예외를 발생시키는 관계없는 요소를 삽입 할 수 있습니다. JSON 삽입과 관련된보다 심각한 경우 공격자는 JSON 문서 나 요청 내에서 비즈니스 중요한 값을 예측 가능한 방식으로 조작 할 수있는 관계없는 요소를 삽입 할 수 있습니다.

자신이 소유하고있는 웹 서비스에서 json을받는 경우 Fortify의 경고를 무시할 수 있습니다. 그러나 입력에 JArray.Parse()을 호출하고 유효한 배열이라고 가정합니다. 그러나 그렇지 않으면 JsonReaderException이됩니다. 또한 스키마에 대한 JSON의 유효성을 실제로 확인하지는 않으므로 JSON.NET example을 참조하여 JSON 스키마를 지정하는 방법을 확인하십시오.

사실, Fortify가 타사 웹 서비스에서받은 JSON의 유효성을 검사하는 방법에 대해 알고 싶습니다.