繁体   English   中英

The Rails Gem'omniauth-google-oauth2'是否安全/ request.env如何工作?

[英]Is The Rails Gem 'omniauth-google-oauth2' Secure / How Does request.env work?

我已经使用https://github.com/zquestz/omniauth-google-oauth2上给出的示例模式在我的rails / devise应用程序中实现了“ omniauth-google-oauth2” gem。 但是,我担心这种模式并不安全。

我试图查看git hub上的源代码,以及https://developers.google.com/identity/sign-in/web/devconsole-project上的 Google官方文档,但是我无法说服自己模式是安全的。

从谷歌文档,流应该看起来像这样:

Google OAuth流程

我的安全问题在于对request.env的工作原理不甚了解。

问题1 :用户可以设置request.env值(例如,使用cURL请求之类的值)吗?

问题2 :如果是这样,是什么阻止了恶意用户访问应用程序的omniauth回调端点并设置了request.env的值,以便他们可以模拟其他用户? 例如,在github上显示的示例中,控制器中的回调端点为:

类Users :: OmniauthCallbacksController <Devise :: OmniauthCallbacksController

def google_oauth2

  # You need to implement the method below in your model (eg app/models/user.rb) @user = User.from_omniauth(request.env["omniauth.auth"]) if @user.persisted? flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google" sign_in_and_redirect @user, :event => :authentication else session["devise.google_data"] = request.env["omniauth.auth"].except(:extra) #Removing extra as it can overflow some session stores redirect_to new_user_registration_url, alert: @user.errors.full_messages.join("\\n") end 

结束

结束

问题3 :我的Rails应用服务器(我正在使用puma)似乎未记录图表中第5步的请求(将代码交换为令牌)。 从用户的角度来看,我在Chrome中看不到该信息,因为用户未参与该通信。 我如何查看/记录/验证正在通话?

问题1:用户可以设置request.env值(例如,使用cURL请求之类的值)吗?

是。 request.env包含很多东西,例如传入的标头和参数。 但是用户无法将request.env['omniauth.auth']设置为由服务器端请求提供程序获取的值填充的请求。

使用envrequest.env传递值是一种将Rack中间件中的数据沿管道传递的相当标准的方法。 由于用户输入仅限于参数和标题,因此它不是一个巨大的安全漏洞。

问题2:如果是这样,是什么阻止了恶意用户访问应用程序的omniauth回调终结点并设置request.env的值,以便他们可以模拟其他用户?

用户唯一接受的输入是访问令牌,ID令牌和一个时间码。 获得这些将需要蛮力攻击(在提供者上)或中间人。

问题3:我的Rails应用服务器(我正在使用puma)似乎没有记录图中第5步的请求(将代码交换为令牌)。 从用户的角度来看,我在Chrome中看不到该信息,因为用户未参与该通信。 我如何查看/记录/验证正在通话?

由于正在从Rails服务器向提供程序进行调用,因此日志中没有任何内容。 您可以使用httplog之类的工具进行调试,但实际上您应该进行涵盖Omniauth策略这些方面的测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM