2014-05-21 57 views
0

我正在使用Play 2.2,我需要將包含鏈接的電子郵件發送回我的應用程序(用於註冊目的)。 現在,電子郵件是由API(基本上說「我想請求訪問這個應用程序」)觸發。管理員可以接受或拒絕該請求的電子郵件,具有一次令牌安全機制。在Play Framework中從請求中獲取主機名。安全問題?

我正在使用反向路由和absoluteURL()方法來確定我需要在電子郵件中插入的URL是。這不能被硬編碼,因爲應用程序運行在不同的環境/域名,所以我希望這是動態的。

但是,absoluteURL使用請求作爲隱式參數並從Host頭獲取URL。可以用不同的「主機」標題僞造一個請求並將其發送到我的應用程序,這可能導致電子郵件具有類似http://evil.com/acceptRequest?token=gfdklhggfd 的鏈接該令牌是合法的,因爲它實際上是由我的應用程序生成的。

有沒有更好的方法來做到這一點沒有安全問題?

回答

0

如果每個環境都作爲單獨的應用程序有效運行,另一種方法是將主機名作爲配置的一部分傳遞。

例如在application.conf

hostName=${HOST_NAME} 

,然後設置環境變量HOST_NAME爲運行遊戲服務器的腳本。

這就是說 - 攻擊者可以通過僞造的URL獲得什麼?訪問密鑰或類似的東西是否可以重新用於其他主機?那就是我會努力使事情安全的地方。

+0

是的,這是我認爲最好的選擇,當我第一次想到它時似乎不那麼靈活,但最終應該沒問題。 關於僞造的網址,它可能會導致攻擊者誘騙帳戶的管理員授予他訪問其安全帳戶的權限。 但是你說得對,這裏還有另外一個與這個東西無關的安全問題需要解決。 這個問題更多的是關於使用請求頭來確定Play中的主機名的安全性的平均水平。 感謝您的回答! – user1498572