1

有名な (そして唯一の)記事asmxsを読んだ後、 Get リクエストを許可しない理由を説明しようとしたため、 :[ScriptMethod(UseHttpGet = true)]を使用すべきではありませんが、まだ質問があります:

なんで ?

Web service 、その名前は service であるため、彼はそれが GET か POST かを気にしないと仮定します。

人が CSRF を実行したとしても: 悪意のあるサイトに埋め込むように:

<script type="text/javascript" src="http://contoso.com/StockService/Stock.asmx/GetQuotes?symbol=msft" /> 

だから何 ?

asmx POV 経由 - 通常のリクエストです。

誰かが例の問題を見つけてくれますか?

編集

新しいブラウザで解決された多くの問題があります。このリンクは、新しいブラウザーでテストする必要がある他の方法を示しています。

4

2 に答える 2

4

JSON ハイジャックについては、この記事で簡単に説明しています。

現在認証されているユーザーにクレジット カード番号のリストを返す Web サービスがあるとします。

[{"id":"1001","ccnum":"4111111111111111","balance":"2345.15"},
 {"id":"1002","ccnum":"5555555555554444","balance":"10345.00"},
 {"id":"1003","ccnum":"5105105105105100","balance":"6250.50"}]

攻撃の実行方法は次のとおりです。

  1. 認証されたユーザーが悪意のあるページにアクセスするようにします。

  2. 悪意のあるページは、ユーザーがログインしているアプリケーションの機密データにアクセスしようとします。スクリプト タグには同一オリジン ポリシーが適用されないため、HTML ページにスクリプト タグを埋め込むことで、これを行うことができます。<script src="http://<json site>/json_server.php"></script>. ブラウザーは GET 要求をjson_server.php行い、ユーザーの認証 Cookie が要求と共に送信されます。

  3. この時点で、悪意のあるサイトがスクリプトを実行している間は、機密データにはアクセスできません。データへのアクセスは、オブジェクト プロトタイプ セッターを使用して実現できます。以下のコードでは、プロパティを設定しようとしたときに、オブジェクト プロトタイプ プロパティが定義された関数にバインドされてい"ccnum"ます。

    Object.prototype.__defineSetter__('ccnum',function(obj) {
        secrets = secrets.concat(" ", obj); 
    
    });
    

この時点で、悪意のあるサイトは、ccnumによって返された機密の金融データ ()を乗っ取ることに成功していjson_server.phpます。

関数のブラウザ サポートに依存しない、他の形式の JSON ハイジャック テクニックもあり__defineSetter__ます。これは攻撃を実行する 1 つの方法にすぎませんが、この記事Array constructor clobberingで説明されているように、 、UTF-7、など、他にも多くの方法がありますES5 functionality

このため、JSON を返す GET 要求は、ASP.NET では既定で無効になっています。

于 2012-10-04T12:48:40.823 に答える
0

あなたが提供した記事にリンクされている記事に従うと、ここにあります: http://ajax.asp.net/docs/overview/AsynchronousLayerOverview.aspx、それから読むことができ、それが具体的に唯一の理由ですこれは次のとおりです。

サーバー上のデータを変更したり、重要な情報を公開したりするメソッド呼び出しには、GET 要求はお勧めしません。GET 要求では、メッセージはブラウザーによって URL にエンコードされるため、改ざんの対象になりやすくなります。GET 要求と POST 要求の両方について、セキュリティ ガイドラインに従って機密データを保護する必要があります。

于 2012-10-04T12:49:01.170 に答える