簡體   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