2013-04-07 95 views
0

我正在創建一個RESTful API爲中心的Web應用程序。一旦用戶登錄,他們將收到會話ID和登錄密鑰,用於訪問他們的數據,直到他們的會話過期。如果會話保存在內存中,則Web應用程序(可能還有移動應用程序)將在每次加載頁面時調用API以獲取用戶信息。我正在儘可能地優化此API調用,並且我想知道緩存這些信息是否有意義。在PHP會話中保存用戶信息的安全漏洞?

每個包含用戶數據的表都包含一個更新的時間戳(在每個Postgres更新時觸發)。所以我可以修改API以接受可選的cache_timestamp參數。該API將首先檢查是否有任何用戶數據的表格自該時間戳以來已被修改。如果他們有,那麼它會返回更新的用戶數據;如果沒有,它會返回一個304沒有修改,應用程序會使用緩存。

我的問題是什麼信息太敏感,無法保存在內存中(使用PHP會話)。目前,這些信息包含個人資料(姓名,公司等),聯繫人(電子郵件,電話),設置(通訊,通知)和付款信息(計劃,試用以及引用Stripe的客戶ID)等信息。

我認爲唯一的優勢在於付款信息,但除非我的API密鑰被泄露,否則他們不應該能夠從Stripe訪問任何數據。

+1

在我看來,這似乎是一個糟糕的問題。它屬於近距離投票選項的'不建設性',因爲它'徵求意見/辯論'。 – Daedalus 2013-04-07 04:51:31

+0

我可以看到它是一個意見。但我真的不知道瀏覽器會話是如何工作的,所以我不知道他們是否可以被視爲安全地存儲用戶信息(而不是密碼或信用卡)。 – Sam 2013-04-07 04:52:56

+0

討厭告訴你...但是如果你發出會話ID,它幾乎肯定不是RESTful。 :P – cHao 2013-04-07 04:56:38

回答

2

我不是安全專家,但由於會話存儲在服務器上,攻擊者訪問數據的唯一途徑是已經獲得了一些權限。

你可以看看這個有趣的帖子PHP Session Fixation/Hijacking關於如何保護更多的會話。

如果用戶的會話遭到劫持,那麼就沒有什麼可做的事,攻擊者將訪問數據,就好像它是用戶所討論的一樣。

如果攻擊者可以利用與您的服務器有關的故障,那麼他應該可以讀取會話數據(默認情況下會在一些文件中序列化存儲)。

因此,加密敏感數據,可以防止他讀取它的原始數據。

1

我的看法也是一樣的,支付信息應該存儲在Session變量中,但是你說它沒有API密鑰就無法訪問。我認爲你是安全的。

+0

付款信息應該或不應該被存儲?您只能使用API​​密鑰訪問數據,但它會存儲在瀏覽器的會話中。這是脆弱的嗎? – Sam 2013-04-07 04:49:36

+1

付款信息是敏感數據,因此將其存儲在會話變量中。好的做法不要將敏感數據存儲在瀏覽器緩存中。另請參閱此網站 - http://www.mnot.net/cache_docs/ – 2013-04-07 05:05:05