2009-05-31 60 views
2

我的一個Rails應用程序將取決於內存中的密鑰,因此只有管理員轉到某個頁面並上載有效密鑰後,才能使用其所有功能。存儲Rails應用程序的共享密鑰

問題是這個密鑰需要安全存儲,因此同一臺機器上的其他進程不能訪問它(因此memcached和文件系統不適合)。一個好主意就是將其存儲在應用程序中的某個配置變量中,但新生成的實例將無法訪問該變量。任何想法如何在RubyEE/Apache/mod_passenger上實現?

回答

3

確實沒有辦法實現這個目標。 (這與所有DRM系統都有相同的問題)

您不能將操作系統中的東西保密。您的應用程序必須在內存的某個位置有密鑰,操作系統內核可以讀取它想要的任何內存位置。

您需要能夠信任操作系統,這意味着您可以信任操作系統以正確執行文件訪問權限。這又意味着可以將密鑰存儲在只有rails-user-process可以讀取的文件中。

想想這樣:即使您根本沒有任何密鑰,什麼是阻止服務器上的攻擊者從簡單地更改應用程序代碼本身以訪問禁用的功能?

+0

內核可以訪問密鑰的事實對我來說很好,我只是不希望它可以被其他用戶的進程訪問。如果所有Rails實例都有一個共享內存區域,那麼我會保留它。但在我看來,每個實例只能訪問自己的數據副本。 – 2009-06-01 10:13:20

0

在文件系統中嚴重加密它?

0

怎麼樣對待它像一個普通的密碼,並使用salted hash?一旦用戶認證,他可以訪問網站的功能。

+0

該密鑰在整個應用程序生命週期中應該可用,因爲它將用於加密/解密信息。 – 2009-05-31 17:07:08

1

我會使用文件系統,只對文件所有者具有讀權限,並確保ruby進程是該用戶擁有的唯一進程。 (使用chmod 400 file

您可以得到比這更復雜的內容,但這一切歸結爲使用unix用戶和權限。

相關問題