當用戶數量比較多時,用資料庫儲存用戶名稱及密碼是很好的選擇,但如果直接將用戶的密碼儲存在資料庫,即使資料庫要密碼才可以登入也有安全性的問題。例如系統管理員或者 Web Hosting 的員工便可以看到用戶的密碼,所以先將用戶密碼加密是必要的步驟。
PHP 內建了 MD5() 單向加密演算法,即只可加密,而不可以反向解密,以下是利用 MD5() 函式的具體方法:
這裡是將用戶密碼用 MD5() 加密後加插入資料庫:
CODE:
-
<?php
-
$db_conn = mysql_connect("host", "db_user", "db_pass");
-
mysql_select_db("db_name", $db_conn);
-
-
// 插入資料表的 $password 用了 md5 加密
-
mysql_query("insert into users values
-
('$username', '".md5($password)."')");
-
?>
檢查用戶名稱及密碼:
CODE:
-
<?php
-
$db_conn = mysql_connect("host", "db_user", "db_pass");
-
mysql_select_db("db_name", $db_conn);
-
-
$sql = mysql_query("select * from users where
-
`username`='$username' and
-
`password`='".md5($password)."'");
-
-
if (mysql_num_rows($sql) > 0) {
-
// 用戶名稱及密碼正確
-
} else {
-
// 用戶名稱及密碼錯誤
-
exit();
-
}
-
?>
用以上方法寫出來的登入系統,只用用戶是知道自己的密碼,系統管理員最多只能夠修改密碼,而不能看到源始密碼是什麼。
[…] PHP 加密在資料庫的密碼 - Real-Blog (tags: Tech WebDev PHP Security Tips) […]
Pingback by -TMA-1- » links for 2006-09-21 — September 21, 2006 @ 8:25 am
how about using sha1?
md5 is known to be insecure nowadays.
Comment by Chris — September 21, 2006 @ 7:11 pm
可以使用 MYSQL 內建的 MD5 函數可能處理得更快 ..
Comment by Zeuxis — September 23, 2006 @ 3:55 pm
請小心SQL injection
http://en.wikipedia.org/wiki/SQL_injection
Comment by BestSteve — September 23, 2006 @ 4:41 pm
以上的問題我也有想過,只是想給初學者看來較簡單。
Blog 的互動性真是那麼厲害,貼出不久便有回應補充及修正。
Comment by Sam Tang — September 24, 2006 @ 7:15 am