簡體   English   中英

在緩存文件中存儲密碼和其他敏感信息是否安全?

[英]Is it safe to store passwords and other sensitive info in cache files?

我有一個緩存庫,將緩存的數據存儲在普通的php文件中,數據存儲在數組中。

緩存文件的示例:

cache_userID.php:

$userCache['userID']=2354654654;
$userCache['userName']=foo;
$userCache['userPass']=salted-and-hashed-pass;

它像一種魅力。 因此,我正在考慮使用它來存儲用戶數據(如上面的示例)以保存數據庫查詢。 我已經測試過了,它的頁面加載時間明顯快於從數據庫中獲取的頁面加載時間(這就是我想要這樣做的原因)。

我不確定這是否真的安全。 密碼和其他敏感信息會被添加鹽和散列。 任何人都有可能竊取此數據嗎? 除了他們是否具有FTP詳細信息以訪問源代碼外(事實並非如此)。

沒有!

您存儲密碼(或仍然敏感的密碼哈希)的每個額外位置都是它們可能從其泄漏的另一個位置。 這是為什么不緩存SSL頁的原因之一:因為不應緩存敏感信息。

良好的身份驗證代碼(例如您在SSH中找到的排序方法)甚至可以將標記存儲密碼的存儲區域標記為不可交換,從而使操作系統無法將其寫入磁盤。

從此緩存中泄漏敏感數據的風險可能較低,但是這樣做會增加風險。 通過將此數據放置在本地PHP文件中,任何本地文件包含漏洞現在都可以訪問它。 實際上,將密碼回顯到屏幕可能不僅需要包含本地文件。 在存在此緩存之前,可能甚至需要SQL注入漏洞或整個服務器的危害才能訪問密碼哈希,現在這些密碼本地文件都可以訪問哈希了。

可以在其他地方存儲其他不太敏感的數據來提高頁面加載速度,但是密碼和密碼散列應該不受限制。

您可以通過存儲身份驗證令牌來避免在每次頁面加載時為經過身份驗證的用戶計算和查找密碼哈希。 這應該在登錄時隨機生成(因此很難預測),並且應該是短暫的。 這就是PHP會話ID的確切含義,並且在第一次檢查比較密碼的位置之后,足以驗證您的用戶是否經過了正確的身份驗證。


我剛想到,如果要查詢數據庫並在每次頁面加載時計算密碼哈希,則必須將客戶端的密碼(或可能的密碼哈希)存儲在某個地方,可能在cookie中,並且此敏感數據正在發送在互聯網上進行每個頁面請求。 通常,這是一種不好的做法,除非您對每個頁面都使用SSL,否則將導致密碼(或密碼哈希)保存在用戶的硬盤驅動器和潛在的中間代理中。


聚苯乙烯

我很好奇,為什么包括本地文件是相當比應該是從你的數據庫的簡單鍵值查找。 我的猜測是您的網絡上存在可怕的延遲,或者在用戶表上存在爭用。 真的需要修復。

只要文件包含<?php ,數據就將是安全的,因為除非用戶具有FTP訪問權限或存在安全漏洞允許用戶讀取任意文件,否則用戶將看不到PHP源代碼。

但是,您應該通過以下方式保護緩存文件夾:將其移動到文檔根目錄之外,或者通過Web服務器配置阻止任何http訪問(例如, deny from all .htaccess deny from all的訪問)。

只要您的緩存文件不在www可訪問的位置,它就應該足夠安全(假設您的代碼沒有任何缺陷!)。 不要依賴PHP標簽來隱藏您的內容...引擎可能會失敗並暴露此數據(盡管這種情況很少見,但確實會發生)。

但是...如果這是一個好主意,不是每個人都會這樣做嗎? 每次您想了解所有信息時,您真的需要用戶的所有數據嗎? 如果您認為這樣更有效,那么它必須是一個非常簡單的應用程序。 我不知道為什么您的數據庫會這么慢。 您是否設置了適當的索引等?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM