2011-02-17 53 views
6

我有兩種鹽,每個用戶都有一個獨特的鹽,與用戶信息一起存儲在數據庫中。第二種鹽是特定於網站的鹽。兩者都需要散列密碼。哪裏是最好的地方存儲網站的密碼salt?

問題是我不知道我應該在哪裏保持我的網站鹽。現在它駐留在運行散列算法的PHP方法中。我應該將它保存在/ var/www /之外的文件中並讓PHP打開並閱讀文件?我不想將它存儲在數據庫中,因爲如果我的數據庫受到損害,那麼這會破壞使用兩種鹽的目的。

有什麼建議嗎?

+0

作爲config.php文件中的常量? – Jonah 2011-02-17 17:30:20

回答

11

還沒提到一個選項嗎?服務器提供的環境變量。你可以在httpd.conf或.htaccess中完成。因爲Apache不服務.htaccess文件,你並不需要擔心它隱藏儘可能多...

SetEnv WEBSITE_SALT 232lhsdfjaweufha32i4fv4239tauvkjn 

這樣的話,你需要在你的應用程序做的是$salt = getenv('WEBSITE_SALT');。這樣做的好處是,它是透明的應用程序...

+1

爲什麼不是每個人都喜歡你?這很棒! – Undo 2013-04-03 13:42:34

+0

我可以在這裏看到一個問題。在大多數應用程序中,用戶具有相同的密碼,如「密碼」或「密碼」。如果使用相同的salt生成具有相同值的MD5哈希值,則會生成相同的哈希值,從而允許潛在的攻擊者檢測模式並在應用程序中創建用戶密碼。 我試圖對相同的鹽與Python的hashlib:(下文中提取) `明文= '你好世界' 鹽= '232lhsdfjaweufha32i4fv4239tauvkjn' H1 = hashlib.md5(鹽+明文).hexdigest() H2 = hashlib.md5 (salt +明文).hexdigest() print h1 == h2 >> True` – 2016-06-02 03:27:44

5

是,保持它在某處的PHP配置文件,最好是Web根目錄上面的文件夾。

0

將網站salt存儲在永遠無法提供的文件中是您最好的選擇。如你所指出的那樣,加密鹽或與其他人保持聯繫毫無意義。只要確保存儲它的文件在請求時不能被提供(在根www之外工作)並確保它具有適當的權限設置。

0

只需將其粘貼到.php文件中的變量中即可。爲了增加安全性,通過-默默無聞的一個小一點,你可以將其存儲在(比方說)base64編碼格式,並將該變量命名的東西完全無害的,像

$this_is_not_the_salt_you_are_looking_for = base64_decode(.... encoded salt string here ...); 

出於安全的一個額外的附加位,將.php文件放置在webroot之外的某個位置,以便如果由於某種原因Web服務器的配置變得糟糕,並開始提供原始PHP代碼,則包含鹽信息的文件不能直接訪問。

-3

大多數人會存儲常數鹽在配置文件中。這很好,但使用SALT的重點是確保您的數據無法被外部源讀取。

我見過很多人實際上將salt存儲在數據庫的accounts字段中。儘管如此。它是創建帳戶時唯一生成的,因此每個用戶都有獨特的鹽。

這不是鹽,但 - 這是關於你如何對數據進行加密。

sha1($password.md5(md5($password.md5($salt)))) 

即使使用鹽,您也可能永遠無法破解它。因此,如果您決定每個帳戶都獨一無二,那麼請不要擔心將其存儲在數據庫中。只要確保你的加密過程是強大的!

相關問題