2014-03-03 353 views
0

我最近開始學習PHP,並試圖創建一個安全的登錄遵循本指南http://www.wikihow.com/Create-a-Secure-Login-Script-in-PHP-and-MySQL無法登錄到我的安全登錄腳本PHP和MySQL

除了login(),一切似乎都適用於我。我調整了一下。 我把一些回聲嘗試針點錯誤,它返回的密碼錯誤比較IF:

該函數返回:登錄功能錯誤1

位於功能登錄包括/功能。 php:

$password = hash('sha512', $password . $salt); 

    if ($db_password == $password) { 
       echo "Password is correct!"; 

sha512.js是從這裏pajhome.org。 uk/crypt/md5/sha512 .html, 以及上述WikiHow的表單。

連接是不是一個問題,我使用相同的連接插入到MySQL,它的工作原理。

感謝您對我的問題的關注,如果我沒有透露足夠的信息請諮詢。

編輯:刪除了很多的代碼,因爲@SeanWM評論我不應該指望沒有人會通過所有的代碼。

@Robert Rozas謝謝你的幫助。密碼確實不匹配。 輸出是:

登錄功能錯誤1個c2d872cb4c6a1b3c22ce35fb9dc0dfca14aa6d48 VS c2d872cb4c6a1b3c22ce35fb9dc0dfca14aa6d48cc2e8c3dcf02c87a3dfb7e3fec2a098b932c11655960e43bb89af058220ff8d75c666fe57ef7206b74d5f9af

請看看密碼是如何構建的:

它從寄存器形式的.js:

// Add the new element to our form. 
    form.appendChild(p); 
    p.name = "p"; 
    p.type = "hidden"; 
    p.value = hex_sha512(password.value); 

然後通過php:

$password = filter_input(INPUT_POST, 'p', FILTER_SANITIZE_STRING); 

    // Create a random salt 
    $random_salt = hash('sha512', uniqid(openssl_random_pseudo_bytes(16), TRUE)); 

    // Create salted password 
    $password = hash('sha512', $password . $random_salt); 

然後插入到MySQL中。如果你能再請指出我正確的方向,我將不勝感激。

編輯2:感謝來自@Second Rikudo輸入它去掉雙散列

但是從二Rikudo的意見,光「SHA512是不安全的」 和@tadman後工作「那教程是令人擔憂不完整,並使用有害的不良做法「 我決定修改代碼利用https://github.com/ircmaxell/password_compat 第二Rikudo建議。

+3

爲了讓你知道,我甚至都不會理解這一點。請不要發佈您的所有代碼,並要求我們修復它。嘗試縮小問題的範圍,以便更具體一些。你應該閱讀[this](http://stackoverflow.com/help/how-to-ask)。 – SeanWM

+0

@SeanWM你和其他18位觀衆在評論時=) – MonkeyZeus

+4

如果你不能登錄,那麼我猜它確實很安全。 –

回答

1

如果我錯了,請糾正我,但您在註冊時(使用JavaScript一次,使用PHP一次)哈希密碼兩次,但登錄時只使用一次哈希(使用PHP)。

作爲旁註,sha512是不是安全。升級到PHP5.5以利用password_hash()和其他密碼功能。

如果不能升級,請參閱ircmaxell's library for forward compatibility with those functions(他實際上是誰添加password_*()到PHP的人,所以他的圖書館是好的)。

+0

感謝您輸入Rikudo Sennin ^^。在我開始雙重哈希之後,它最終奏效了。但我會遵循你的建議,並使用ircmaxell的庫修改我的代碼。 –

+0

@Miguel_Ryu:很高興聽到!如果您的答案解決了您的問題,請考慮通過點擊問題分數下方的大綠色標記來接受它。這將標記問題完整。 –