我对当前的应用程序有很多安全问题,我想知道我是否会在以下方面受到滥用。
a( .我的主要访问控制方法是在我的应用程序控制器中维护current_user,current_company current_project方法。这些方法基于存储的会话密钥返回对象,会话密钥在用户登录时建立,在用户注销时清除。I.e如果我想了解当前用户的一些信息,我可以调用"current_user.prole",或者如果我想看看用户试图更改的帐户是否属于他,我会检查url中请求的相关帐户id是否真的属于该用户,基本上如下
账户控制器
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并调用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在服务器端生成的页面不是这样。
这可能是一个天真的问题,但谢谢你,因为在开始到处泄露秘密之前,我只想确定自己在做什么。
使用active_record回调对令牌进行身份验证https://guides.rubyonrails.org/active_record_callbacks.html