1. ホーム
  2. asp.net-mvc

[解決済み] JsonRequestBehaviorをAllowGetに設定すると、どのような「機密情報」が開示される可能性があるのか?

2022-08-19 22:37:22

質問

をテストするたびに、同じ古いエラーが発生します。 URL をブラウザのアドレスバーからテストすると、毎回同じエラーが発生します。 returning Json (を表示します(内蔵の MVC JsonResult helper ):

で使用された場合、機密情報が第三者のウェブサイトに開示される可能性があるため、このリクエストはブロックされました。 GET request . を許可するには GET requests を設定します。 JsonRequestBehaviorAllowGet .

Fiddlerを起動してポストリクエストを行うのではなく、今回は、正確に言うと GET リクエストが公開し POST リクエストは公開しないのですか?

どのように解決するには?

あなたのウェブサイトには GetUser というウェブメソッドがあるとします。

http://www.example.com/User/GetUser/32

で、JSONのレスポンスを返します。

{ "Name": "John Doe" }

このメソッドが POST リクエストのみを受け付ける場合、コンテンツがブラウザに返されるのは、AJAX リクエストが http://www.example.com/User/GetUser/32 に POST メソッドで AJAX リクエストを行った場合のみ、コンテンツがブラウザに返されます。を実装していない限り、コンテンツはブラウザに返されないことに注意してください。 CORS を実装していない限り、ブラウザはこのリクエストを行う他のドメインからあなたのデータを保護します。

しかし、GET リクエストを許可した場合、POST ではなく GET で上記のような AJAX リクエストを行うのと同様に、悪意のあるユーザは script タグを使用することで、自分のサイトのコンテキストに JSON を含めることができます。 www.evil.com :

<script src="http://www.example.com/User/GetUser/32"></script>

このJavaScriptは www.evil.com なぜなら、あなたの Web メソッドから返されたオブジェクトを読む方法はないはずだからです。しかし、古いバージョンのブラウザ (例: Firefox 3) のバグにより、JavaScript のプロトタイプオブジェクトが再定義される可能性があり、それによって www.evil.com を使用してメソッドから返されたデータを読み取ることができます。これは JSON ハイジャックとして知られています。

参照 この記事 を参照してください。ただし、最近のブラウザ (Firefox、Chrome、IE) の後期バージョンでは、この問題は知られていません。