A_nagatives
09-10-2007, 07:03 PM
md5 เป็นอัลกอริทึมส์ที่ถูกใช้ในการเข้ารหัสแบบทางเดียว อย่างแพร่หลาย แต่ใจปัจจุบัน hacker หรือ cracker จำนวนมากบนอินเตอร์เน็ต ไม่ว่าจะเป็นมือเก่า มือใหม่ ก็สามารถ brute-force เพื่อค้นหาข้อความที่แท้จริงได้อย่างง่ายดาย!! แล้วความปลอดภัยของเว็บไซต์บนอินเตอร์เน็ตในปัจจุบันนี้จะยังเหลืออยู่อีกหรือ??? เทคนิคเล็กๆ นี้อาจช่วยให้เว็บไซต์ของคุณปลอดภัยขึ้น ไม่มากก็น้อย ครับ
การใช้คำสั่ง md5
โดยทั่วไป md5 จะถูกใช้ในการเข้ารหัส รหัสผ่าน เช่น ผู้ใช้กรอกรหัสผ่านว่า yellow โปรแกรมส่วนใหญ่ก็จะทำการเข้ารหัสผ่านดังกล่าว ด้วย md5 และก็จะได้ผลลัพธ์ออกมาว่า d487dd0b55dfcacdd920ccbdaeafa351 แล้วโปรแกรมก็จะเอาเข้าไปเก็บในฐานข้อมูล การกระทำเช่นนี้เป็นการป้องกัน ไม่ให้ฐานข้อมูลมีรหัสผ่านที่แท้จริงเก็บไว้ เพราะ ถ้าหากเราเก็บรหัสผ่านจริงไว้ในฐานข้อมูล อาจมีปัญหาเกิดขึ้น เช่น มี hacker เจาะระบบสำเร็จ แล้วสามารถขโมยฐานข้อมูลไปได้ เขาก็จะทราบถึงรหัสผ่านที่แท้จริงของผู้ใช้ทุกคนทันที และเมื่อเขาทำอย่างนั้นได้ เขาก็มีโอกาสที่จะเข้าไปยัง mailbox ของผู้ใช้ คนนั้นๆ ได้ด้วยเช่นกัน เพราะโดยส่วนใหญ่ ผู้ใช้มักจะใช้รหัสผ่านสำหรับ mail สำหรับเว็บไซต์ต่างๆ ด้วยรหัสผ่านเดียวกัน เพราะฉะนั้นการเข้ารหัสผ่านด้วย md5 ก่อนเก็บลงในฐานข้อมูล ก็เป็นวิธีการเพิ่มความปลอดภัยได้อย่างดี
เทคนิคเพิ่มเติม
เนื่องจากการป้องกันรหัสผ่านที่แท้จริง จาก hacker โดยทั่วไปจะใช้วิธีการเข้ารหัสแบบ md5 กัน แต่ผมอยากจะแนะนำให้แทนที่คุณจะใช้ md5 แบบนี้
<?
$pwd = md5($_POST['password']);
?>
จากโค้ด นี้ จะพบว่า มีการเข้ารหัสข้อความที่กรอกมาจากแบบฟอร์ม ด้วย md5 แล้วนำไปเก็บไว้ในตัวแปร $pwd แต่วิธีการแบบนี้ถูกใช้อยู่บ่อยครั้งในหลายเว็บไซต์ เพราะงั้นถ้า hacker รู้ว่าคุณใช้วิธี เข้ารหัสแบบ md5 โดยการนำรหัสผ่านมาเข้ารหัสตรงๆ แบบนี้ อาจทำให้ hacker คนนั้น brute-force md5 ของคุณได้ง่ายขึ้น เพราะฉะนั้น เรามาทำให้งานของ hacker หนักขึ้นกันดีกว่าครับ เรามาทำให้วิธีการธรรมดาแบบนี้ เป็นวิธีการที่แตกต่างจากเว็บไซต์ของคนอื่นกันครัีบ ขอให้คุณลองดูโค้ดต่อไปนี้ครับ
<?
$pwd = md5($_POST['password'].\A_nagatives\);
?>
จากโค้ดข้างต้นจะเห็นได้ว่า การเข้ารหัสด้วย md5 จะไม่กระทำกับรหัสผ่านเปล่าๆ แต่จะกระทำกับ รหัสผ่านที่ถูกเติมข้อความเข้าไป ซึ่งข้อความดังกล่าวก็คือ A_nagatives นั่นเอง วิธีนี้จะช่วยทำให้ ผลลัพธ์จากการเข้ารหัสผ่านของคุณ แตกต่างออกไปจากเว็บไซต์ของคนอื่นครับ และนี่หละความแตกต่างนี่หละครับ จะช่วยถ่วงเวลาให้กับ hacker ได้บ้าง ไม่มากก็น้อยครับ
การใช้คำสั่ง md5
โดยทั่วไป md5 จะถูกใช้ในการเข้ารหัส รหัสผ่าน เช่น ผู้ใช้กรอกรหัสผ่านว่า yellow โปรแกรมส่วนใหญ่ก็จะทำการเข้ารหัสผ่านดังกล่าว ด้วย md5 และก็จะได้ผลลัพธ์ออกมาว่า d487dd0b55dfcacdd920ccbdaeafa351 แล้วโปรแกรมก็จะเอาเข้าไปเก็บในฐานข้อมูล การกระทำเช่นนี้เป็นการป้องกัน ไม่ให้ฐานข้อมูลมีรหัสผ่านที่แท้จริงเก็บไว้ เพราะ ถ้าหากเราเก็บรหัสผ่านจริงไว้ในฐานข้อมูล อาจมีปัญหาเกิดขึ้น เช่น มี hacker เจาะระบบสำเร็จ แล้วสามารถขโมยฐานข้อมูลไปได้ เขาก็จะทราบถึงรหัสผ่านที่แท้จริงของผู้ใช้ทุกคนทันที และเมื่อเขาทำอย่างนั้นได้ เขาก็มีโอกาสที่จะเข้าไปยัง mailbox ของผู้ใช้ คนนั้นๆ ได้ด้วยเช่นกัน เพราะโดยส่วนใหญ่ ผู้ใช้มักจะใช้รหัสผ่านสำหรับ mail สำหรับเว็บไซต์ต่างๆ ด้วยรหัสผ่านเดียวกัน เพราะฉะนั้นการเข้ารหัสผ่านด้วย md5 ก่อนเก็บลงในฐานข้อมูล ก็เป็นวิธีการเพิ่มความปลอดภัยได้อย่างดี
เทคนิคเพิ่มเติม
เนื่องจากการป้องกันรหัสผ่านที่แท้จริง จาก hacker โดยทั่วไปจะใช้วิธีการเข้ารหัสแบบ md5 กัน แต่ผมอยากจะแนะนำให้แทนที่คุณจะใช้ md5 แบบนี้
<?
$pwd = md5($_POST['password']);
?>
จากโค้ด นี้ จะพบว่า มีการเข้ารหัสข้อความที่กรอกมาจากแบบฟอร์ม ด้วย md5 แล้วนำไปเก็บไว้ในตัวแปร $pwd แต่วิธีการแบบนี้ถูกใช้อยู่บ่อยครั้งในหลายเว็บไซต์ เพราะงั้นถ้า hacker รู้ว่าคุณใช้วิธี เข้ารหัสแบบ md5 โดยการนำรหัสผ่านมาเข้ารหัสตรงๆ แบบนี้ อาจทำให้ hacker คนนั้น brute-force md5 ของคุณได้ง่ายขึ้น เพราะฉะนั้น เรามาทำให้งานของ hacker หนักขึ้นกันดีกว่าครับ เรามาทำให้วิธีการธรรมดาแบบนี้ เป็นวิธีการที่แตกต่างจากเว็บไซต์ของคนอื่นกันครัีบ ขอให้คุณลองดูโค้ดต่อไปนี้ครับ
<?
$pwd = md5($_POST['password'].\A_nagatives\);
?>
จากโค้ดข้างต้นจะเห็นได้ว่า การเข้ารหัสด้วย md5 จะไม่กระทำกับรหัสผ่านเปล่าๆ แต่จะกระทำกับ รหัสผ่านที่ถูกเติมข้อความเข้าไป ซึ่งข้อความดังกล่าวก็คือ A_nagatives นั่นเอง วิธีนี้จะช่วยทำให้ ผลลัพธ์จากการเข้ารหัสผ่านของคุณ แตกต่างออกไปจากเว็บไซต์ของคนอื่นครับ และนี่หละความแตกต่างนี่หละครับ จะช่วยถ่วงเวลาให้กับ hacker ได้บ้าง ไม่มากก็น้อยครับ