多くの Rails 認証チュートリアルでは、ユーザー ID を session[:user_id] に保存して、ユーザーを記憶し、認証していることに気付きました。アプリのどこかに user_id が公開されていると仮定すると (URL、HTML 属性のプロパティなど)、セッション Cookie を編集して他のユーザーの user_id を使用できるので、これは安全ではありませんか? ここで何か不足していますか?
3 に答える
Rails Security Guideによると、「セッション ハッシュの改ざんを防ぐために、サーバー側の秘密を使用してセッションからダイジェストが計算され、Cookie の末尾に挿入されます。」
そのため、セッションはユーザーによる改ざんから安全であると推定できるようです (サーバー側の秘密が安全に保たれていると仮定します)。ただし、ユーザーは引き続きセッション ハッシュ内のすべてを読み取ることができるため、機密情報を保存する必要はありません。
Cookie には user_id が含まれない傾向があり、本質的に無作為で無意味な文字列であるセッション キーが含まれています。セッションはサーバー (データベース、memcached、または redis などの nosql ストア) に保存され、セッションはユーザー ID を保持します。
したがって、特定のユーザーのセッション レコード (サーバー側のみ) には、次のデータが含まれる場合があります。
key: asoiuoi09u23uo8789289askho2
user_id: 1234
また、Cookie (クライアント側) はセッション キーを保持するため、Cookie は次のようになります。
name: somecookiename
site: www.yoursite.com
content: asoiuoi09u23uo8789289askho2
したがって、他の人のセッションにアクセスするには、そのセッション キーを取得する必要があります。これは決して不可能ではありませんが (セッション スニッフィングを参照)、https を使用することで (SSL 証明書が必要になります)、はるかに困難になります。
:session_id
一般的に、ほとんどの場合、サーバー側でチェックされないため、in cookie セッションは役に立たず、省略できると感じています。それとも私が間違っていますか?
ほとんどの場合:user_id
、署名で十分です。