有关Rails 5中的安全性的一些问题

时间:2018-12-03 01:44:20

标签: ruby-on-rails security ruby-on-rails-5

在当前的应用程序中,我遇到了许多安全问题,并且想知道我是否会在以下领域中遭受滥用。

a)。我的主要访问控制方法是在我的应用程序控制器中维护一个current_user,current_company current_project方法。这些方法基于用户登录时建立的存储会话密钥返回对象,并在用户注销时清除。也就是说,如果我想了解有关当前用户的信息,可以调用“ current_user.role”,或者如果我想查看用户尝试更改的帐户是否属于他,请检查是否在用户名中请求了相关的帐户ID。 url实际上属于该用户,基本上如下

在帐户控制器中

def account_info
  redirect_to login_path if !user.logged_in
  account_id=params[:account_id]
  @account = Account.find(account_id)
  unless account_belongs_to_user(account_id)
    redirect_to unauthorized_path
  end

结束

在我的应用程序控制器中,最初对用户进行身份验证时,我会执行以下操作:

session[:current_user_id] = user.id

并在用户注销时清除该会话密钥。

然后,当请求帐户并调用account_belongs_to_user时,应用程序控制器将对此进行处理,或多或少是这样的:

def account_belongs_to_user(account_id)
  account = Account.find(account_id)
  return account.user_id==session[:current_user_id]
end       

因此,我想我的安全方案最终取决于会话数据是否安全且不容易被欺骗。

b)渲染页面时,有时会将具有敏感数据的对象传递给我的erb页面以生成页面文本。

例如,我可能将“公司”对象(ActiveRecord)传递到视图以生成发票屏幕。但是,作为@company传递的company对象具有许多敏感数据,如访问密钥等。如果我不专门包括以下内容,则不会真正了解内部结构:

<%= @company.access_token %> 

在我的网页上,我能否确信@company的属性不会以某种方式传递到浏览器中,除非我明确要求将其呈现在页面上?

当使用Rails为AngularJS单页应用程序提供数据时,这显然是一个问题,因为我为Angular传递的所有呈现页面的内容都可能被邪恶的人访问,即使不在页面本身上,但我希望服务器端通过Rails生成的页面不是这种情况。

这可能是一个幼稚的问题,但是谢谢,因为我只是想确定自己在做什么,然后才开始在各处散布秘密。

1 个答案:

答案 0 :(得分:0)

使用active_record回调对令牌进行身份验证 https://guides.rubyonrails.org/active_record_callbacks.html