user_Id会话安全吗?哈特尔

时间:2016-04-22 00:55:42

标签: ruby-on-rails session cookies

在Hartl的教程中,我们将会话设置为存储为user_id的哈希版本的cookie。然后,我们将未散列的cookie与user.id

进行比较

https://www.railstutorial.org/book/log_in_log_out

def log_in(user)
    session[:user_id] = user.id
  end

这样安全吗?我无法通过会话散列随机user_id号码来自己生成一个cookie,然后我可以用它作为另一个随机用户登录吗?

2 个答案:

答案 0 :(得分:2)

根据rails的版本,cookie存储的数据要么加密签名(用户可以查看所有数据,但检测并拒绝修改)或签名和加密(修改仍然被拒绝,但用户不能你在会话中存储的内容)。在这两种情况下,如果您篡改会话数据,当rails尝试加载会话时,您将收到异常。

您可以使用控制器中的cookies.signedcookies.encrypted将这些保护用于常规Cookie。

用于加密/签名的密钥来自secret_key_base设置(在最新版本的rails中,这是在config / secrets.yml中)。如果攻击者可以访问此设置,那么他们可以伪造cookie存储会话数据。

答案 1 :(得分:0)

通常你不想公开user.id.会话的工作方式是session [:user_id]将创建一个临时cookie并自动加密user.id.这是session [:user_id]与cookie [:user_id]之间的差异之一。然后它将在下一页自动解密。从技术上讲,它仍然被认为是安全的。