2012-09-18 212 views
10

我應該採取哪些安全措施來確保我的數據庫受到威脅,並且長期訪問令牌不會被盜用?安全地存儲訪問令牌

長壽命訪問令牌與特定服務的用戶名和密碼一樣好,但是從與其他人交談中看來,大多數(包括我自己)都以純文本形式存儲訪問令牌。這似乎與以純文本方式存儲密碼一樣糟糕。很明顯,不能用鹽對&進行哈希令牌。

理想情況下,我想加密它們,但我不確定最好的方式來做到這一點,特別是在開源項目上。

我想這個問題的答案類似於存儲付款信息和PCI合規性的答案,但我也會問爲什麼沒有更多的討論呢?也許我錯過了一些東西。

+0

你是什麼意思「特別是在一個開源項目」?你認爲這是什麼使你決定採用特定類型的加密方案,因爲你的項目不是閉源的? –

回答

7

你只是想驗證他人提供的令牌嗎?如果是這樣,請像對待密碼那樣對待它。使用像Password Based Key Derivation Function 2 (PBKDF2)(也在RFC 2898中描述)的字節推導算法進行10000次迭代並存儲前20個字節左右。收到令牌時。這實際上不可逆轉。

您想將令牌提供給其他人進行驗證嗎?如果是這樣,這是一個挑戰,因爲如果你的應用程序可以解密或以其他方式訪問令牌,那麼攻擊者也可以。認爲香農的馬克西姆,攻擊者知道這個系統,特別是對於一個開源項目。

在這種情況下,最好的方法是使用強算法(如AES256)對令牌進行加密,使用強大的加密標準隨機數生成器生成密鑰並將密鑰安全地存儲在與數據不同的位置例如上述示例中的數據庫外的權限保護文件。後者意味着SQL注入攻擊不會泄露密鑰。

+0

謝謝 - 我更多的是指你的用例中的後者,我需要能夠在用戶不在的時候使用該令牌。 –

+0

@akton但爲什麼要像密碼一樣對待令牌? (純文本)密碼是我們不希望攻擊者獲得的信息,他/她可以嘗試使用它登錄到具有相同密碼的其他服務。但是令牌只對你自己的服務有效 - 所以如果攻擊者把他/她的手放在令牌/分貝上,他/她會比使用令牌登錄到你的賬戶更有害處......我沒有看到什麼? – pkyeck

+0

假設問題是正確的,令牌是可以驗證用戶的每用戶長期證據。換句話說,它是一個密碼。 – akton