3

ブラウザの外部からHTTPPOSTリクエストを行う必要がありますが、Rails バックエンドが認証を受け入れません (エラー 401)。そのような場合、CSRF トークンを渡す必要があることはわかっていますが、機能していません。

ブラウザーのフォームから要求を行うと、期待どおりに機能しますが、ブラウザーの外部から (たとえば、curl を使用して) 同一の要求 (ヘッダーと Cookie に関して) をシミュレートしようとすると、認証が失敗します。動作しません。

protect_from_forgery2 つの小さな変更により、ブラウザーなしで成功することができました。(1) CSRF を検証するoff をオフにするか、(2) リクエストGETの代わりにPOSTを使用します。どちらの場合も、Cookie を渡すだけで十分です。つまり、問題は間違いなく CSRF に関連しています。

それで、私の質問はPOST、ブラウザを使用せずにRailsサーバーへのCSRFで保護されたHTTPを作成するにはどうすればよいですか?

明確にするために、プロセスは次の 3 つのステップに分けられます。

  1. Login : セッションを識別するために Cookie を返します。

  2. New :GET後で使用する CSRF トークンを返すリクエスト (Cookie を使用)。

  3. Create :作成POSTしたい情報を送信するリクエスト (セッション Cookie と CSRF トークンの両方を使用)。

失敗する唯一のステップは 3 番目のステップです。

4

1 に答える 1

2

CSRF トークンが Cookie ベースであると仮定すると、リクエストを行うために使用するプログラムは Cookie を追跡する必要があります。--cookie-jarcurl のオプションを確認してください。

于 2011-06-02T19:18:04.023 に答える