在当前的应用程序中,我遇到了许多安全问题,并且想知道我是否会在以下领域中遭受滥用。
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生成的页面不是这种情况。
这可能是一个幼稚的问题,但是谢谢,因为我只是想确定自己在做什么,然后才开始在各处散布秘密。
答案 0 :(得分:0)
使用active_record回调对令牌进行身份验证 https://guides.rubyonrails.org/active_record_callbacks.html