เนื้อหาบทความนี้ จะเป็นแนวทาง การเข้ารหัส รหัสผ่านในฐานข้อมูล
กรณีเรามีข้อมูลสมาชิกอยู่แล้ว แต่ไม่ได้ทำการเก็บรหัสผ่าน แบบเข้ารหัสตั้งแต่แรก
โดยจะใช้คำสั่ง php เข้ารหัส ดังนี้
1 | $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
เช่นใช้คำสั่ง
1 2 3 4 5 6 | $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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $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 |
เรามาดูการตรวจสอบการล็อกอินที่จะต้องปรับ
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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" ; } } |
เช่นเดียวกันกับหน้าสมัครสมาชิก ให้รับปรับค่ารหัสผ่าน แบบเข้ารหัส ก่อนบันทึก
โดยอาจจะใช้คำสั่ง
1 2 | $gen_password =sha1(md5(md5( stripslashes ( $_POST [ 'password' ])))); // รับค่ารหัสผ่านที่กรอกเข้ามา เข้ารหัสก่อน แล้วเอาตัวแปรนี้ไปบันทึกลงฐานข้อมูล |