9

RailsはデフォルトでCSRFの保護がHTTP GETの要求を持っていないことを理解しています。これは、それらが冪等であると主張しているからです。しかし、これらのGETリクエストからユーザーに返される機密情報があります。この情報を取得する悪意のあるサイトを望みません。CSRF HTTPによるGETリクエストの保護

のリクエストをRailsのCSRFから守るにはどうすればよいですか?

+1

悪意のある人がcsrf攻撃を行うと、要求の結果が表示されません。副作用のみが危険です。 –

+0

この種のタスクでは、通常、クッキーによる認証を使用します。 –

+0

@NikitaBeloglazov認証がクッキーブラウザは、通常、被害者のサイトが作成されたという要求を見たときに、被害者のウェブサイトにそのCookieを送信する。これは[Wikipediaの記事](http://en.wikipedia.org/wiki/Cross-site_request_forgery#Example_and_characteristics)からのものです: "Bobの銀行が認証情報をクッキーに保存し、クッキーの有効期限が切れていない場合は、 Bobのブラウザが画像を読み込もうとすると、彼のCookieと共に回収フォームが提出され、Bobの承認なしに取引が許可されます。 –

答えて

9

CSRF攻撃の要求に対する応答を読み取るには、攻撃者は自分のJavaScriptコードを実行する必要があります。その場合、アクセスは一部で制限されますSame Origin Policy。攻撃リクエストを想定し

が本当にcross originで、Same Origin Policy for DOMは(iframeを使用して、埋め込みなど)DOM経由でのアクセスを禁止し、次のようにCross-Origin Resource Sharing (CORS)XMLHttpRequestを経由して、クロスオリジン・リクエストを規制:

要求がsimple cross-origin requestであれば、I 。 e。 simple methodにはsimple header fieldsしか含まれていない場合、そのリクエストが送信されます(これはHTMLベースのCSRFに似ています)。しかし、簡単なクロス・オリジン・リクエストの応答には、response allows resource sharingがあるかどうかによって異なります。

他のクロスオリジン要求では、実際の要求が送信される前に、いわゆるが必要です。その要求は、サーバーがプリフライトが送信された送信元からの要求を許可するかどうかをチェックするために送信されます。また、プリフライトが成功し、実際の要求に対する応答がリソース共有を許可する場合にのみ、応答にアクセスできます。

サーバーがCORSをサポートしていて、他の起点(つまり、Access-Control-Allow-Origin: *)との明示的な共有を許可していない限り、要求が許可されていればCSRF応答は攻撃側サイト。

関連する問題