0

私は Devise を使用して自分のウェブサイトをテストしています。私が見つけたのは、Devise のサインアウト後にリダイレクトを傍受した場合、「destroy」メソッドが呼び出されている間に、戻るボタンを使用してシステムに再度ログインできることです。 .

もう少し詳細:

1) 次のオプションで Devise を使用しています。また、sign_out_all_scopes (true) のデフォルト設定を使用しています。

2) Burp Proxy を使用して、サーバーからブラウザに戻ってくる呼び出しを傍受しています。

3)私のセッションコントローラーの破棄方法は次のとおりです。

def destroy
  Rails.logger.info "RESETTING SESSION"
  reset_session

  Rails.logger.info "DESTROYING DEVISE SESSION"
  super
  Rails.logger.info "DONE WITH DEVISE"    
end

ログの呼び出しは私だけのものです。また、reset_session の有無にかかわらず試してみました。

4) ユーザーとしてログインし、ログアウト コールをクリックすると、Web サーバーで Destroy メソッドが呼び出されていることがわかりますが (ログを参照)、ブラウザへのコールをインターセプトします。

5) 戻るボタンをクリックすると、サイトに戻ることができ、ログアウトしたことがないかのようにナビゲートできます。

舞台裏で Warden のログアウトを呼び出しているにもかかわらず、Cookie がブラウザで破棄されない限り、実際には何もしていないように見えます。また、もう少し詳しく見てみると、Devise や Warden がログアウト時にデータベースに対して何もしていないように見えます。つまり、ログアウトしても Cookie を破棄しなくても何の効果もありません。

私は Rails に比較的慣れておらず、Devise にも非常に慣れていないので、何か足りないのでしょうか?

編集: それで、Billy Chen との簡単な会話の後、私は何も悪いことをしていないように見えます。これが Devise/Warden の仕組みです。

ログアウトすると本当にユーザーがログアウトすることを確認したいサイトで、この問題をどのように解決しているのか気になります。ログイン/ログアウト時に更新される User オブジェクトのステータスをスローするのは簡単ですが、現在の設計でそれを行うオプションがない理由が知りたいです (オプションであったとしても)。

編集2:

問題を解決しました。User モデルで :rememberable がオンになっていないにもかかわらず、devise.rb ファイルに「config.use_salt_as_remember_token = true」があり、これを削除すると問題が修正されました。モデルが記憶可能でない場合にその構成を使用する必要がある理由は正確にはわかりませんが、少なくとも問題は解決されています。

編集3:

どうやら私はうそつきです、それは修正されていません。私はげっぷプロキシで応答をインターセプトするのを逃しただけです。再テストでは、これがまだ問題であることを示しています。ユーザーにキーをタグ付けし、ログアウト時に削除することで修正します。ハックですが、問題は解決するはずです。

4

1 に答える 1

0

「破棄」は、ユーザーではなくセッションを破棄することです。では、なぜこの「破棄」アクションでデータベース操作を期待するのでしょうか?

ユーザーがログインすると、ログインページ、別名「Session#new」に電子メールとパスワードを入力します。

彼が「ログイン」ボタンを押すと、リクエストは「Session#create」に送信されます。ログイン情報が正しければ、セッションが確立されています。サーバーは、ユーザー ID を含むハッシュであるセッション ID を含む Cookie を送信します。

その後、このユーザーからのすべてのリクエストで、ブラウザはこの Cookie と一緒にリクエストを送信します。サーバーはこのハッシュをデコードし、データベースからユーザー ID をロードします。

ログアウトしたい場合、「ログアウト」ボタンを押して「DELETE」リクエストを「Session#destroy」に送信すると、サーバーはブラウザにその Cookie からキー/ID を削除するように要求します。

これでセッションは破棄されます。このユーザーは、その後送信するリクエストに有効なユーザー情報が含まれていないため、ログイン ユーザーの保護されたリソースにアクセスできなくなります。

それが基本的にどのように機能するかです。詳細はこちらで確認できます: http://guides.rubyonrails.org/security.html

于 2013-04-15T15:53:16.310 に答える