Json文字列を逆シリアル化するためにNewtonsoft.Jsonを使用していますが、未検証のjsonを使用しているとfortifyが文句を言いました。次に、Newtonsoft.Json.Schemaを使用してチェックを追加しましたが、さらに文句を言うようになりました
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エンティティに挿入できる可能性があります。
応答が遅れたことをお詫びします。私はなんとか要塞を修正/欺くことができました。これが修正です
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);
}
}
}
これが誰かを助けることを願っています
あなたの場合、Fortifyは、信頼できないソースからjson
を使用していると文句を言っているようです。これは、 Fortifyのドキュメント で述べられていることです。
アプリケーションが未検証の入力からJSONを構築する場合、JSONドキュメントとメッセージのセマンティクスを変更できます。比較的害のないケースでは、攻撃者は、JSONドキュメントまたはリクエストの解析中にアプリケーションが例外をスローする原因となる無関係な要素を挿入できる可能性があります。 JSONインジェクションを含むようなより深刻なケースでは、攻撃者は、JSONドキュメントまたはリクエスト内のビジネスクリティカルな値の予測可能な操作を可能にする無関係な要素を挿入できる可能性があります。
所有しているWebサービスからjson
を受け取った場合は、Fortifyの警告を無視できます。ただし、入力でJArray.Parse()
を呼び出しており、それが有効な配列であると想定していることに注意してください。そうでない場合は、JsonReaderException
を取得します。また、JSONをスキーマに対して実際に検証するわけではありません。JSONスキーマを指定する方法については、 JSON.NETの例 を参照してください。
正直なところ、FortifyがサードパーティのWebサービスから受信したJSONを検証することをどのように期待するかを知りたいと思います。
誰かがまだ解決策を探しているなら、私は次のことをしました、そしてそれは期待通りに働いているようです。