เนื้อหาบทความนี้ จะเป็นแนวทาง การเข้ารหัส รหัสผ่านในฐานข้อมูล
กรณีเรามีข้อมูลสมาชิกอยู่แล้ว แต่ไม่ได้ทำการเก็บรหัสผ่าน แบบเข้ารหัสตั้งแต่แรก
โดยจะใช้คำสั่ง php เข้ารหัส ดังนี้
$gen_password=sha1(md5(md5("รหัสผ่านที่ยังไม่ได้เข้ารหัส")));
หรือใครจะใช้รูปแบบอื่นก็ได้ ดัดแปลงได้ตามต้องการ
มาดูตารางฐานข้อมูลสมาชิกที่ยังไม่ได้เข้ารหัสรหัสผ่าน
* ฟิลด์ member_password ถ้ากำหนดขนาดความยาวของข้อมูลน้อย เช่น น้อยกว่า 20
ตัวอักษร ให้แก้ไขปรับความยาวเป็นประมาณ 80 เพื่อรองรับรหัสผ่านที่เข้ารหัสแล้ว
member_id | member_name | member_password | member_fullname | member_type |
---|---|---|---|---|
1 | demo | 123456 | demo | 1 |
2 | user1 | test | user1 | 2 |
3 | user2 | 'ssodao csoj,c | user2 | 1 |
ให้เราเพิ่มฟิลด์เข้าไปในตาราง เพื่อเก็บค่ารหัสผ่านมาพักไว้ จัดการ ในที่นี้เเพิ่มเป็น temp_password
member_id | member_name | member_password | member_fullname | member_type | temp_password |
---|---|---|---|---|---|
1 | demo | 123456 | demo | 1 | |
2 | user1 | test | user1 | 2 | |
3 | user2 | 'ssodao csoj,c | user2 | 1 |
จากนั้นใช้คำสั่ง sql ทำผ่าน phpmyadmin หรือผ่าน php ด้วยคำสั่ง sql เพื่อคัดลอก
รหัสผ่านจากฟิลด์หลัก member_password มาเก็บไว้ใน temp_password
เช่นใช้คำสั่ง
$q=" UPDATE tbl_member SET temp_password=member_password WHERE temp_password='' "; mysql_query($q);
จะได้ตาราง
member_id | member_name | member_password | member_fullname | member_type | temp_password |
---|---|---|---|---|---|
1 | demo | 123456 | demo | 1 | 123456 |
2 | user1 | test | user1 | 2 | test |
3 | user2 | 'ssodao csoj,c | user2 | 1 | 'ssodao csoj,c |
ต่อไปจะใช้ php ดึงรายการมาทำการเข้ารหัส และอัพเดทเข้าไปในตารางอีกครั้ง
* หากมีข้อมูลจำนวนมาก เช่นสมาชิกหลายหมื่น ก็สามารถ ใช้ limit จัดการทีละไม่มากได้
การใช้คำสั่ง php
$q=" SELECT * FROM tbl_member WHERE member_password=temp_password AND temp_password!='' "; $qr=mysql_query($q); while($rs=mysql_fetch_array($qr)){ $gen_password=sha1(md5(md5($rs['temp_password']))); @mysql_query(" UPDATE tbl_member SET member_password='".$gen_password."' WHERE member_id='".$rs['member_id']."' "); echo $rs['member_password']."<br>"; }
จะได้ตาราง
member_id | member_name | member_password | member_fullname | member_type | temp_password |
---|---|---|---|---|---|
1 | demo | f122db007ed655921f98184e4302bba84990ff68 | demo | 1 | 123456 |
2 | user1 | c375f5ca90143176681418485aff1f157d64aa1c | user1 | 2 | test |
3 | user2 | 1a3bad4b6e9e11d830558d84f5a6ecf658982349 | user2 | 1 |
'ssodao csoj,c |
เมื่อทำเสร็จแล้ว ให้เราทดสอบการล็อกอิน โดยเราต้องปรับโค้ดการล็อกอินใหม่
เพื่อตรวจสอบค่าจากการเข้ารหัส หากทดสอบโอเคแล้ว ก็ให้ลบฟิลด์รหัสผ่านเชื่อคราว
ในที่นี้ชื่อ temp_password ออกไปด้วย
ตารางจะได้เป็น
member_id | member_name | member_password | member_fullname | member_type |
---|---|---|---|---|
1 | demo | f122db007ed655921f98184e4302bba84990ff68 | demo | 1 |
2 | user1 | c375f5ca90143176681418485aff1f157d64aa1c | user1 | 2 |
3 | user2 | 1a3bad4b6e9e11d830558d84f5a6ecf658982349 | user2 | 1 |
เรามาดูการตรวจสอบการล็อกอินที่จะต้องปรับ
if(isset($_POST['login']) && $_POST['login']!=""){ $chk_password=sha1(md5(md5(stripslashes($_POST['password'])))); // เข้ารหัส รหัสผ่านที่เราเข้ามาตรวจสอบ แล้วใช้ตัวแปรนี้ไปเช็คใน ตารางฐานข้อมูล $q=" SELECT * FROM tbl_member WHERE member_name='".$_POST['username']."' AND member_password='".$chk_password."' AND member_type='1' LIMIT 1 "; $qr=mysql_query($q); if($qr && mysql_num_rows($qr)>0){ $rs=mysql_fetch_array($qr); echo $rs['member_name']."<br>"; }else{ echo "No"; } }
เช่นเดียวกันกับหน้าสมัครสมาชิก ให้รับปรับค่ารหัสผ่าน แบบเข้ารหัส ก่อนบันทึก
โดยอาจจะใช้คำสั่ง
$gen_password=sha1(md5(md5(stripslashes($_POST['password'])))); // รับค่ารหัสผ่านที่กรอกเข้ามา เข้ารหัสก่อน แล้วเอาตัวแปรนี้ไปบันทึกลงฐานข้อมูล