ホームページ >バックエンド開発 >C++ >逆シリアル化を特定の型に制限している場合でも、Json.Net の「TypeNameHandling.Auto」を使用した自動 JSON 逆シリアル化は安全ですか?

逆シリアル化を特定の型に制限している場合でも、Json.Net の「TypeNameHandling.Auto」を使用した自動 JSON 逆シリアル化は安全ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-07 14:16:41991ブラウズ

Is Automatic JSON Deserialization with Json.Net's `TypeNameHandling.Auto` Secure, Even When Limiting Deserialization to a Specific Type?

Json.Net TypeNameHandling Auto により外部 JSON は脆弱になる可能性がありますか?

問題:

ユーザーがカスタム JSON オブジェクトをアップロードする Web サイト アプリケーションでは、潜在的な脅威を認識することが不可欠です自動化された JSON 型の逆シリアル化から発生します。問題は、逆シリアル化される唯一の型が特定の型 (例: MyObject) であり、MyObject のメンバーのいずれも System.Object 型または動的型を持たない場合、自動型逆シリアル化が脆弱性の影響を受けやすいかどうかです。

答え:

これらの条件を遵守するとリスクが大幅に軽減されますが、完全な保護は保証されません。 Json.Net の TypeNameHandling 設定を Auto に設定すると、MyObject に対応するフィールドが存在しない場合でも、「$type」情報に基づいてオブジェクトを作成できる可能性があります。

詳細な説明:

Json.Net をターゲットとする攻撃は、TypeNameHandling 設定を悪用して、受信側システムを侵害するように設計されたオブジェクトである「攻撃ガジェット」を構築します。 Json.Net の保護メカニズムには、不明なプロパティの無視と型の互換性のチェックが含まれます。ただし、明らかな型なしメンバーがなくても攻撃ガジェットを構築できるシナリオもあります。

  • 型なしコレクション (ArrayList、List など) の逆シリアル化
  • の逆シリアル化半型付きコレクション (例: CollectionBase)
  • ISerializable を実装する型の逆シリアル化 (例: Exception)
  • メンバー条件付きシリアル化を含む型の逆シリアル化 (例: public object tempData; public bool ShouldSerializeTempData() { return false; })

推奨事項:

  • 注意: TypeNameHandling は、外部 JSON を逆シリアル化するときは慎重に使用する必要があります。 SerializationBinder は次のような場合に推奨されます検証。
  • データ モデルの確認: メンバー タイプがオブジェクト、動的、または攻撃ガジェットと互換性がないことを確認します。
  • シリアル化バインダーの検討:カスタム SerializationBinder を実装して、どの型を厳密に制御するか

結論として、提供された条件によりリスクが大幅に軽減されますが、完全なセキュリティが保証されるわけではないことに注意することが重要です。 Json.Net の TypeNameHandling Auto 設定は依然として攻撃ガジェットの作成を促進する可能性があり、カスタム シリアル化バインダーなどの追加の予防措置が必要です。

以上が逆シリアル化を特定の型に制限している場合でも、Json.Net の「TypeNameHandling.Auto」を使用した自動 JSON 逆シリアル化は安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。