我正在使用'omniauth-openid'gem来实现OpenID登录。在我的OmniAuth回调方法中,我做了类似的事情(它已经简化但传达了重要的细节):
def google
oauth = request.env['omniauth.auth']
if @user = User.find_by_email(oauth.info.email)
sign_in(@user) and redirect_to '/dashboard'
end
end
这与GitHub上的OmniAuth文档显示的内容实际上相同;然而我觉得它非常不安全。攻击者所要做的就是手动更改回调URL中的info.email参数,他们可以像任何其他用户一样登录。
这是OmniAuth的一个根本缺陷吗?或者是否有某种方法可以确认传递给OmniAuth回调方法的参数是由OpenID提供程序真正发送的,而不是由坏人修改的?
答案 0 :(得分:-1)
我认为这就是“protect_from_forgery”的用途。 http://ruby.about.com/od/mr/g/protectforgery.htm