2015-07-11 10 views
0

我在更改登錄密碼時遇到了麻煩。我使用散列和鹽作爲我的密碼。我不能在phpmyadmin上更改它,因爲它是散列類型的字符。這裏是我的使用電子郵件地址更改散列(加密密碼)的更好方法

create_acc.php

<?php 
include_once('config.php'); 
$email = $_POST['e-mail']; 
$pass = $_POST['pass']; 

$hash = hash('sha256',$pass); 

function createSalt(){ 
    $text = md5(uniqid(rand(), true)); 
    return substr($text,0,3); 
} 
$salt = createSalt(); 
$pass = hash('sha256',$salt.$hash); 
$email = $mysqli->real_escape_string($email); //$mysqli is located at my config.php 

$query = $mysqli->query("INSERT INTO `login`(`email`,`pass`,`salt`) VALUES('$email','$pass','$salt')"); 

$mysqli->close(); 

header('location: login.html'); 
?> 

任何想法如何,我可以創造一個更改密碼或忘記密碼,就像在現代登錄系統現在。每當您忘記密碼或想要更改密碼時,服務器都會在您的電子郵件中發送關於更改加密密碼的鏈接?

+0

停止使用自制散列,並開始使用PHP的內置password_hash()/ password_verify() –

+0

停止將用戶輸入直接注入到SQL語句中,並開始使用預準備語句/綁定變量 –

回答

0

不,使用phpmyadmin你可以做一些簡單的加密,如md5和sha1。但你可以用一個棘手的方式來做到這一點。從任何在線服務或php加密您的密碼,然後將您的加密密碼放在您的phpmyadmin中。就是這樣:)

+0

爵士我的意思是我需要讓一個忘記密碼或更改密碼,就像現在的現代登錄頁面一樣。無論何時他/她想要更改密碼或忘記密碼,服務器都會在用戶電子郵件上發送鏈接。 – truelogicINC

+0

從phpmyadmin?它有點令人困惑,你正在談論發送鏈接到電子郵件恢復密碼。但是你想從phpmyadmin更改密碼! – Imran

0

您可以使用這個相同的邏輯來實際重置密碼/分配新密碼。你可以用最簡單的方法做的是創建一個密碼重置表單和一些URL(端點),它可以接受(POST)由電子郵件或用戶名組成的輸入/數據請求。一旦你得到了,你通常會發送一封電子郵件給用戶的電子郵件,其中包含允許用戶重置密碼的URL。這部分應該創建一個唯一的標記,並且應該存儲在您選擇的數據庫中。發送給用戶的電子郵件通常由作爲URL一部分的令牌組成,並且應在用戶訪問後儘快刪除令牌,但您的里程和刪除/保留令牌的選擇可能因應用程序和用戶而異。一旦用戶訪問發送密碼重置的URL,您將執行查找令牌,查找哪個用戶想要重置密碼(如果令牌存在),然後只允許用戶輸入密碼(&確認密碼)。一旦用戶點擊提交,您只需通過在創建新用戶時使用的相同密碼散列函數來傳遞新密碼即可。

哦,你可以用你的代碼做得更好。它看起來是來自幾年前。它可以更安全,寫得更好。我建議檢查PHP手冊的密碼哈希和準備報表。

+0

Ahhhh。先生,順便說一句,我如何創建鏈接在post方法上的url的標記東西? :) – truelogicINC

相關問題