我注意到很多Rails身份验证教程在session [:user_id]中存储用户ID以记住用户并对其进行身份验证.假设app中有某个地方公开暴露了user_ids(URL,HTML属性上的属性等),这不是不安全的,因为我可以编辑我的会话cookie来使用别人的user_id吗?我在这里错过了什么吗?
cookie往往不包含user_id,它包含会话密钥,它本质上是一个随机的,无意义的字符串.会话存储在服务器上(在数据库中,或memcached中,或像redis等的nosql存储中),会话保存用户ID.
因此,给定用户的会话记录(仅限服务器端)可能包含以下数据:
key: asoiuoi09u23uo8789289askho2
user_id: 1234
Run Code Online (Sandbox Code Playgroud)
并且cookie(客户端)持有会话密钥,因此cookie看起来像这样:
name: somecookiename
site: www.yoursite.com
content: asoiuoi09u23uo8789289askho2
Run Code Online (Sandbox Code Playgroud)
因此,要访问其他人的会话,您需要获取其会话密钥.这绝不是不可能的(参见会话嗅探),但使用https(后者又需要SSL证书)会变得更加困难.