2013-01-11 66 views
0

我已將我的項目網站從magento遷移到django,它是一個擁有數百萬用戶的網站。我已經成功地從網站導入了所有數據,但是我遇到的主要問題是遷移客戶數據庫,尤其是使用密碼,因爲很顯然,我無法在django網站上向每個客戶提供新密碼,因爲這樣非常耗時。而對於客戶重置密碼,將是非常惱人的,許多客戶將從網站丟失。從數據庫檢索magento中的客戶密碼

請給我一些想法如何從數據庫中檢索magento中的客戶密碼?

回答

3

您無法恢復密碼。 Magento使用哈希函數來存儲密碼(根據版本,md5和sha1)。

只有你可以做的事情 - 重置密碼或在你的網站實現相同的功能來檢查密碼,因爲它是在magento中完成的。

0

這可能是你追求的指南:

How to decrypt magento enterprise edition password?

+0

magento不對客戶密碼使用加密。只有單向散列(這是寫在你的鏈接下) –

+0

是的,我看到了更多,編輯我的迴應。 –

+1

Magento將密碼存儲爲一種哈希方式,無法解密。打開彩虹桌並開始蠻力。 –

1

一瞥,它看起來像Django的商店它的使用md5${salt}${hashed_password}密碼和他們在前面加上鹽。在這種情況下,您應該能夠使用Magento密碼並重新格式化字符串,以便通過django密碼檢查。

此答案的可行性/準確性取決於您使用的是社區/專業版還是企業版。該代碼基於社區代碼,因爲我可以更自由地共享這些代碼,具體取決於企業可能實現或不可能實現的實現,您需要檢查Mage_Core_Model_Encryption:validateHash

+0

企業使用單向散列的方式與CE相同,數據庫中數據的格式相同,但它使用了sha256(舊版EE使用sha1)散列而不是md5來提高安全性。如果您在數據庫中碰巧有一個md5散列,則Enterprise將在下次用戶登錄時更新它保留在數據庫中的散列。 – davidalger

0

Cags的答案適合我。我正在從Magento社區版1.7遷移到Django-Oscar。

我只有幾百個用戶移動,但重置他們的密碼不是一個選項。

爲了方便...

他的代碼的Python版本:

hash = xxxxxxxxxxxxxxxxx:xx # The hash from Magento DB table customer_entity_varchar 
splithash = hash.split(':') 
djangopass = 'md5$' + splithash[1] + '$' + splithash[0] 
1

如果你把老弱哈希值從遺留系統,則危及你的用戶。

如果某些攻擊者(或某個惡意管理員)可以訪問哈希和用戶數據,他可以輕鬆破解它們(請參閱,例如http://hashcat.net/oclhashcat-plus/),並將其全部用於用戶正在使用的任何服務(當然,建議用戶不重用密碼,擁有強大的密碼等,但很多人不會知道或忽略這一點)。

弱哈希值大約是,除了 bcrypt,pbkdf2,shaXXX_crypt。即使是像隨機鹽漬sha256一樣的東西也必須被認爲是脆弱的。

所以,一個理智的過程可能是:

  1. 不只是支持弱哈希直接
  2. 導入弱哈希值,但再次使用強大的算法中哈希他們:強(弱(明文))
  3. 在登錄時,將雙重哈希的東西升級爲強(明文)
  4. 在此模式下運行系統一段時間,您的常用用戶將在某個時間具有較強的(明文)哈希值。
  5. 爲了擺脫內部weak()散列,使所有這些散列無效(這隻會影響您的不常見用戶),向用戶發送密碼重置鏈接和一些聯繫信息以解決問題。在電子郵件中,您可以指出,您非常關心安全性,並且需要重置以改進安全性。如果不頻繁的用戶仍然對您的服務感興趣,他只會重置他的密碼。如果他不再有興趣,他會忽略電子郵件。無論如何,你的密碼存儲中不會再有雙重密碼,而只是一個無效密碼。
  6. 禁用對內部weak()哈希值的支持,以用於站點配置中的雙哈希。
  7. 不贊成對軟件中內部散列/雙重散列的支持。
  8. 稍後,移除對軟件內部散列/雙重散列的支持,以簡化它。

注意:如果遺留系統存在安全漏洞,那麼考慮到密碼被暴露,那麼考慮舊哈希是沒有選擇的。