1

興味深い問題があります...変更を本番環境にプッシュする前に、Web アプリケーションが IBM アプリ スキャン アプライアンスを通過する必要があります。私の最新の変更には、ASP.NET MVC の AntiForgeryToken が含まれています。これをテストしたすべてのブラウザは問題なく動作します。しかし、アプライアンスがフォームを送信しようとすると、検証エラーが発生します。検証トークンを見ると、アプライアンスは投稿のフォーム値で html エンコードを行っているため、文字列が一致しません...これは次のようになります。

cmiuJRHizXLPvlu9zHKmTwdJiHvq+n87CSJZkixkf/BLHayCPVITJhRCsWWirPWg - Cookie から取得

つまり、+ を %2B に、/ を %2F に変換しています... 誰かこれを見たことがありますか? これはクライアント ブラウザの問題ですか? また、このスキャンでアプリを取得できるように、特殊文字を含まない文字列を生成する AntiForgeryToken がありますか? ありがとう!

4

1 に答える 1

1

MVCコードを見ると、RNGCryptoServiceProviderを使用してトークンを作成しているように見えます。興味深いことに、Cookie名に対して安全でない文字(基本的には質問で示した「+」と「/」)を置き換えるメソッドがありますが、プライベートとしてマークされており、どこで使用されているのかわかりません。

残念ながら、AntiForgeryDataクラスは封印されているため、独自のクラスを派生させることはできません。それはあなたの質問に対する明白な解決策だったので、これは非常に悲しいことです。

MVCコードに基づいて新しい属性を作成し、安全方法を自分で利用することもできます。DRYに違反しますが、Microsoftがクラスを封印したので、それを回避する方法はわかりません。

于 2010-01-07T19:21:20.667 に答える