11

更新:GWT 2.3は、XSRF攻撃と戦うためのより優れたメカニズムを導入しています。http://code.google.com/webtoolkit/doc/latest/DevGuideSecurityRpcXsrf.htmlを参照してください


GWTのRPCメカニズムは、すべてのHTTPリクエストで次のことを行います-

  1. 2つのカスタムリクエストヘッダー(X-GWT-PermutationとX-GWT-Module-Base)を設定します
  2. コンテンツタイプをtext/x-gwt-rpcとして設定します。charset = utf-8

HTTPリクエストは常にPOSTであり、サーバー側ではGETメソッドが例外をスローします(メソッドはサポートされていません)。

また、これらのヘッダーが設定されていないか、値が間違っている場合、サーバーは「おそらくCSRF?」という例外を除いて処理に失敗します。またはその効果のために何か。

質問は:これはCSRFを防ぐのに十分ですか?純粋なクロスサイトリクエストフォージェリメソッドでカスタムヘッダーを設定し、コンテンツタイプを変更する方法はありますか?

4

4 に答える 4

6

このGWTRPCがブラウザで使用されている場合、CSRFに対して100%脆弱です。<form>content-typeはhtml要素 で設定できます。X-GWT-Permutation禁止されているヘッダーX-GWT-Module-BaseのFlashのブラックリストには含まれていません。したがって、フラッシュを使用してCSRF攻撃を実行することが可能です。CSRF保護のために信頼できる唯一のヘッダー要素は「リファラー」ですが、これが常に最良のアプローチであるとは限りません。可能な限り、トークンベースのCSRF保護を使用してください。

これが私が書いたいくつかのエクスプロイトであり、私が説明しているあいまいな攻撃に光を当てるはずです。このためのフラッシュエクスプロイトは次のようになります。 これ、コンテンツタイプを変更するjs/htmlエクスプロイトです。

私のエクスプロイトはFlex3.2用に作成され、ルールはFlex 4(Flash 10)で変更されました。最新のルールは次のとおりです。ほとんどのヘッダーはリクエストPOSTに対してのみ操作できます。

navigateTo()CSRF に使用するFlashスクリプト: https ://github.com/TheRook/CSRF-Request-Builder

于 2010-04-09T18:49:28.323 に答える
4

GWT 2.3は、XSRF攻撃と戦うためのより優れたメカニズムを導入しています。GWTRPCXSRF保護を参照してください

于 2011-09-07T18:42:40.370 に答える
3

私はこの質問をしたことを知っていますが、約1日の調査(Rookからのポインターのおかげで!)の後、私は答えがあると思います。

GWTがすぐに提供するものは、CSRFからユーザーを保護しません。セキュリティを維持するには、GWTアプリケーションのセキュリティに記載されている手順を実行する必要があります。

GWTRPCは「content-type」ヘッダーを「text/x-gwt-rpc; charset=utf-8」に設定します。HTMLフォームを使用してこれを設定する方法は見つかりませんでしたが、フラッシュで設定するのは簡単です。

カスタムヘッダー(X-GWT-PermutationとX-GWT-Module-Base)は、もう少し注意が必要です。HTMLを使用して設定することはできません。また、サーバーがcrossdomain.xmlで特に許可しない限り、Flashを使用して設定することはできません。FlashPlayer10のセキュリティを参照してください。

さらに、SWFファイルが独自の発信元ホスト以外の場所にカスタムHTTPヘッダーを送信する場合は、要求の送信先のHTTPサーバーにポリシーファイルが存在する必要があります。このポリシーファイルは、SWFファイルの元のホスト(またはより大きなホストのセット)を、そのホストへのカスタム要求ヘッダーの送信を許可されているものとして列挙する必要があります。

現在、GWTのRPCには2つの種類があります。古いカスタムシリアル化形式のRPCと、新しいJSONベースのde-RPCがあります。AFAICT、クライアントコードは常にこれらのリクエストヘッダーを設定します。古いスタイルのRPCはサーバー側でこれらのヘッダーを強制しないため、CSRF攻撃が発生する可能性があります。新しいスタイルのde-RPCはこれらのヘッダーを強制するため、攻撃できる場合とできない場合があります。

全体として、セキュリティに関心がある場合は、リクエストで強力なCSRFトークンを送信し、GWTに依存してそれを防止しないようにしてください

于 2010-04-10T20:30:31.883 に答える
0

簡単な方法があるかどうかはわかりませんが(私もそれを見つけることに非常に興味があります!)、少なくとも、任意のヘッダーを使用して任意のクロスサイトリクエストを実現するための高度な方法があるようです:http:/ /www.springerlink.com/content/h65wj72526715701/私はこの論文を購入していませんが、要約と紹介は非常に興味深いものに聞こえます。

たぶん、ここの誰かがすでに完全版の論文を読んでいて、少し拡張することができますか?

于 2010-04-09T20:03:19.843 に答える