2016-08-29 81 views
-1

我有一個小網站使用Html,Css,Javascript和PhP。該網站包含一個用戶必須輸入密碼的基本登錄頁面。然後將所述密碼發送到php,然後使用SHA-512對其進行加密並將其添加到數據庫中。我應該在Javascript還是在後端加密登錄密碼?

所以我開始想知道。這是做事的首選方式嗎?我認爲這可能會更好,如果我使用JavaScript加密密碼,併發送到PHP時,它已經加密。至少這樣,原始密碼不會在POST請求中。

但這真的是正確的方法嗎?如果任何人都能看到我使用的是什麼類型的加密,這不是一件壞事嗎?

+1

正確的方法是使用HTTPS來保護傳輸過程中的密碼,並使用服務器端爲密碼創建的慢哈希算法(* not * SHA256,或任何其他SHA家族成員,這些都是快速哈希,並且不要有鹽)。 –

+0

@ AlexanderO'Mara我正在使用HTTPS。我只是想知道散列應該在哪裏完成。無論是什麼散列。 – TheCrafter

+1

你不應該使用簡單的散列函數來保護你的用戶密碼。你需要使用像PBKDF2,bcrypt,scrypt和Argon2這樣強大的散列方案。一定要使用高成本因子/迭代次數。選擇成本是很常見的,因此一次迭代至少需要100ms。查看更多:[如何安全地哈希密碼?](http://security.stackexchange.com/q/211/45523) –

回答

1

你必須認識到,加密東西客戶端不解決任何問題。當您發送加密的內容並且服務器使用它來驗證用戶時,該加密值就成爲事實上的密碼。攻擊者只需要攔截請求,讀取加密的密碼並再次發送相同的請求。 通過加密客戶端沒有什麼收穫。

首選的解決方案是存儲醃製密碼哈希服務器端,發送未加密的憑據但使用SSL/TLS,然後計算髮送的憑據服務器端的哈希值並將它們與存儲的哈希值進行比較。

也許到這裏看看:

會話管理小抄 - OWASP https://www.owasp.org/index.php/Session_Management_Cheat_Sheet

+0

你是對的我明白了!謝謝。 – TheCrafter

0

說密碼,然後發送到PHP,這反過來,將其加密使用SHA-512,並將其添加到數據庫。

而不是想學習how to store passwords safely

我認爲這可能會更好,如果我使用JavaScript加密密碼,併發送到PHP時,它已被加密。至少這樣,原始密碼不會在POST請求中。

參見:Javascript Cryptography Considered Harmful。 TLS是這個問題的正確解決方案,許多其他人都喜歡它。

+1

感謝您提供的答案和鏈接。他們非常有幫助! – TheCrafter