1

.NETを使用してBinaryFormatterConvert.ToBase64Stringカスタムオブジェクトをシリアル化<input>し、Webページの非表示タグに格納しています。

ユーザーがフォームを送信したら、手順を逆にしてカスタムオブジェクトを逆シリアル化します。

var formatter = new BinaryFormatter();
var byteData = Convert.FromBase64String(submittedString);
var ms = new MemoryStream(byteData);
var originalObject = (MyCustomType)formatter.Deserialize(ms);

ギャップのあるセキュリティホール:ユーザーがインスタンスを巧みにシリアル化MyMaliciousTypeしてbase-64文字列に変換し、それをWebフォームに投稿するとどうなるでしょうか。

デシリアライズを実際に実行するに、デシリアライズされるタイプが特定のタイプと一致するかどうかを確認する方法はありますか?

4

1 に答える 1

2

適切な例外処理が適切に行われている場合、タイプへのキャストは失敗し、害はありません。

データのシリアル化方法をより細かく制御したい場合、および逆シリアル化プロセスで何が起こっているかを監視したい場合は、最終的に、ある種の独自のオブジェクト分類子を実装する必要があります。

たぶん単純なXML形式でさえ、ノードを反復処理することができ、何かが適切に見えない場合は、それを破棄するだけです。

ただし、これを自分で理解したい場合は、次のようにします。

BinaryFormatterの公式仕様は次のとおりです。http://msdn.microsoft.com/en-us/library/cc236844(prot.20).aspxまた
、これはより小さなサードパーティの仕様です:http:// primates.ximian.com/~lluis/dist/binary_serialization_format.htm

これらのリソースを使用すると、バイナリストリームを調べて、シリアル化されたコンテンツの種類を確認できます。ただし、非常に不要なようです。

デシリアライズされた、データを徹底的にチェックするだけです。

于 2012-11-12T02:22:37.277 に答える