私はRails 5でActionCableについて学ぶためにインスタントメッセージングアプリケーションを作成しています。ユーザーがチャンネルに安全に接続してストリームする方法を理解しようとしています。サインイン時に生成された署名付きのCookieを使用して、ActionCableで現在のユーザーを識別することは安全ですか?
ユーザーが購読すると、ユーザーIDで指定されたチャンネルからストリームが配信されます。このユーザーIDは、ユーザーがアプリにサインインしたときに生成された署名付きのCookieから取得されます。 (すなわち、署名されたクッキーは、ユーザからストリームチャネルを指定するChatChannel
でsubscribed
方法で使用される順番であるcurrent_user
変数にActionCable::Connection
にconnect
方法で割り当てられる。)
私の質問は、広くこれがあるかどうかであります安全です。具体
:
- はそれが署名されたクッキーは、
current_user
を定義するために(そしてユーザからストリームどのチャネルを決定するために)使用されると仮定することがOKでは間違いなく、ユーザサインで生成された署名付きクッキーですか?それとも、サインインして、アプリケーションの外で生成されたCookieを使ってActionCable Connectionに接続することは可能でしょうか?この '接続'が通常のHTTPリクエストであった場合、ユーザーIDを含む署名されたCookieは、そのユーザーがリクエストを行ったことを証明するには不十分です。 - ActionCable Connectionを別のユーザーのIDに変更した後に誰かが
current_user
変数を変更する可能性がありますか?そうすれば、別のチャンネルを購読できますか? - ユーザーは、アプリケーションのインデックスアクション(メッセージングインターフェイスをレンダリングする)にアクセスするにはログインする必要がありますが、ログインすることなく、外部で生成された署名入りのCookieを使用してActionCable ConnectionにアクセスできますユーザーIDを含むアプリですか? (
App.cable.subscriptions.create "ChatChannel"
はインデックスページをレンダリングするときに呼び出されますが、中に署名されていない誰かによって呼び出されることに対する保護が何であるのか?)
私は、ユーザーに署名する工夫を使用していて、ちょうどに追加していデフォルトのセッション方法はActionCableを設定するために使用される署名済みクッキーを生成する:: current_user
を接続します
def create
super do |user|
cookies.signed[:user_id] = user.id if user_signed_in?
end
end