1

私は現在、http://ruby.railstutorial.org/chapters/で入手できる Rails チュートリアルを行っています。

第7章から8章のどこかで、Herokuへのデプロイ中にエラーが発生しました(残念ながらエラーを忘れてしまいました)が、オンラインでの解決策は、ユーザーモデルでremember_token変数にアクセスできるようにすることであることがわかりました。解決策が合法かどうかはわかりませんでしたが、うまくいったので、問題なくチュートリアルを続行できました.

remember_token は、以下のように定義される変数です。

self.remember_token = SecureRandom.urlsafe_base64

つまり、ランダム化された文字列であるため、それ自体は非常に安全です。つまり、誰もそれを推測できませんでした。

誰かが以前にログインしたかどうかを判断するために Cookie と共に使用されます。

def sign_in(user)
    cookies.permanent[:remember_token] = user.remember_token
    self.current_user = user
end

def signed_in?
    !current_user.nil?
end

def current_user
    @current_user ||= User.find_by_remember_token(cookies[:remember_token])
end

ただし、私のユーザーモデルには次のものがあります。

attr_accessible :email, :name, :password, :password_confirmation, :remember_token

...そして、アクセス可能な属性としてのこのremember_tokenがセキュリティ上の欠陥になるかどうか疑問に思っています. 誰かが理論的にクライアントコマンドラインを使用して、のようなものでremember_tokenを取得できますuser.remember_tokenか? 一度remember_tokenを取得したら、以前にログインしたことをシミュレートするだけでよいので、パスワードと電子メールの組み合わせは必要ありませんか? もう少し経験のある人がこれに光を当てることができますか?

ありがとう!

4

1 に答える 1

2

attr_accessibleは、一括割当を介して列を更新可能にします。

したがって、remember_tokenで許可するということは、理論的にはuser#updateの新しいPOSTフォームをハックして、フォームを通過するものに設定できることを意味します。

しかし、あなたが提案していることは可能ではないと思います。ユーザーにモデルへのアクセスを許可するために、誰かがどのような種類のコンソールを使用できますか?

この種のアクセスを取得するには、サーバー上のRailsルートでコンソールを実行する必要があります...これはほとんどありません。

他のユーザーが他のユーザー(つまり、自分のユーザーではない)の詳細にコントローラーアクションを介してアクセスできるようにしない限り、他のユーザーのremember_tokenにアクセスできる可能性はほとんどありません。ユーザー自身のremember_tokenへのアクセスを許可することは重要ではありません-彼らはすでにそれを持っています。

于 2013-02-18T03:43:35.490 に答える