title: เก็บพาสเวิร์ดผู้ใช้เป็น text ธรรมดา date: Mar 9, 2015 author: sipp11 Email: sipp11@gmail.com category: tech tags: security, failed icon: briefcase slug: sipa-or-th-store-password-in-plaintext ด้วยความที่ปกติไม่ค่อยได้เข้าไปใน [web SIPA - สำนักงานส่งเสริมอุตสาหกรรมซอฟต์แวร์แห่งชาติ](http://register.sipa.or.th/) เท่าไหร่ ก็เลยจำ password ไม่ได้ สุดท้ายกลับได้พบสิ่งที่น่าสะพรึงกลัว สำหรับองค์กร __ซอฟต์แวร์__ ของประเทศที่ไม่ควรจะทำอะไรให้มันขี้เกียจนัก ปัญหามันก็มีอยู่ที่ว่า พอ forget password แล้วนั่น mail ที่เค้าส่งกลับมาเป็นด้านล่างนี้! ![Plaintext](/media/2015/03/sipa-forget-password.png) มันอาจจะดูไม่แปลกสำหรับบางคนนะครับ แต่การที่เค้าส่ง password เดิมเรากลับมาได้นั้น แปลว่า เค้าก็ต้องเก็บ password เราเป็นแบบนั้นด้วย? แสดงว่า ถ้าเกิด database server เค้าถูกโจมตี password ของเราก็จะถูกเอาไปใช้ง่ายๆ อย่างนั้นเลย ## แล้วควรจะต้องทำอย่างไร? อย่างง่ายและประหยัดที่สุดคือ การเก็บ password เป็น hash digest ครับ เพราะการทำเป็น digest นั้นจะเป็น 1-way encryption ไม่สามารถย้อนกลับไปดูได้ว่า จริงๆ password ที่ผู้ใช้ใช้นั้นคืออะไรกันแน่ การตรวจสอบนั้นก็ไม่ยากเพราะเมื่อผู้ใช้ใส่ password เพื่อจะเข้าระบบก็ทำการหา hash ใหม่เพื่อเทียบกันกับที่เก็บไว้ในฐานข้อมูลเดิม การได้มาซึ่ง hash digest นั้นก็ไม่ได้มีวิธีเดียว ก็จะมีตั้งแต่บ้านๆ `md5` ที่ใช้กันเกลื่อนแต่ก็ยังดีกว่าไม่มีครับ สำหรับปัจจุบันนั้นอย่างน้อยก็ควรจะใช้ `sha-1` (Secure Hash Algorithm 1) สำหรับเวลา forget password ก็ควรจะสร้าง token จำกัดเวลาไว้เพื่อให้ผู้ใช้ที่เข้าถึง email นั้นได้จริงๆ เข้าไป reset password ได้ตัวเองตามเงื่อนไขต่างๆ เพราะสำหรับผู้ให้บริการแล้วนั้น ก็ไม่มีความจำเป็นที่จะรู้ password ของผู้ใช้ด้วยซ้ำไป ตอนนี้ก็ขอเศร้าซักพักครับ องค์กรของชาติเราบุคลากรไม่พอ? หรือไม่คิดจะทำให้ดี?