ต่อจากข่าวเมื่อวาน ช่องโหว่ 7pay ญี่ปุ่นทำผู้ใช้บริการเสียเงินกว่า 55 ล้านเยน ที่เป็นปัญหาร้ายแรง ทาง 7pay ก็ปิดช่องโหว่ไม่ให้ผู้ใช้บริการกรอกอีเมลอื่นเพื่อรีเซ็ตพาสเวิร์ดได้ ฟังดูเหมือนจะเป็นวิธีแก้ปัญหาที่ถูกต้อง แต่ปรากฏว่าที่จริงแค่ซ่อนฟอร์มไม่ให้เห็นเท่านั้น

ねこ吸い on Twitter

“omni7のパスワード再設定の送付先メールアドレス。やっと消えたっていうけど、どうせコメントアウトしてるとかだろう?って思ったらまさかのCSSでdisplay:none;にしてたwww こ れ は 大 草 原 が 広 が るwwwwwwwwwwwwwww”

จากทวีตของคนที่ไปเปิด source code หน้าขอรีเซ็ตพาสเวิร์ดดู เว็บ 7pay แค่ใช้ css display:none ซ่อนช่องกรอกอีเมลไว้ ไม่ได้ปิดรูรั่วอะไรทั้งสิ้น… แถมเทสต์แล้วด้วยว่าใช้ developer tools เปิดกลับมา กรอกอีเมลส่งไปขอรีเซ็ตได้จริง!

ในมุมมอง Developer นี่เป็นวิธีแก้ที่บัดซบมากๆ เพราะคนหวังร้ายยังสามารถกรอกเมลอื่นเพื่อรีเซ็ตพาสเวิร์ดเหยื่อได้ง่ายๆ แทบไม่ต่างกับการไม่ได้ซ่อนเลย ปกติมันควรจะแก้ที่ฝั่ง server ให้ส่ง error กลับมาเวลามีคนกรอกข้อมูลตรงนี้ ไม่ก็รับข้อมูลมาแต่ไม่เอาไปใช้ก็ยังดี นี่เล่นซ่อนกันฝั่ง client ดื้อๆ ปกปิดรูโหว่โดยไม่แก้ไข เห็นแล้วกุมขมับ คนเขียนระบบไม่สนกฎความปลอดภัยขั้นพื้นฐาน Server side validation (การตรวจข้อมูลอินพุตที่ฝั่งเซิร์ฟเวอร์) เลย แสดงให้เห็นความไม่ใส่ใจในความปลอดภัยชัดเจน

display:none ถึงกับติดเทรนด์ทวิตเตอร์ญี่ปุ่น… รูปจาก https://twitter.com/hoto17296/status/1146746163061592064

อนึ่ง มีความเห็นบอกว่า 7pay จำเป็นต้องใช้วิธีนี้แก้ปัญหาเฉพาะหน้า เพราะอาจควบคุมการแสดงผลได้ด้วยบริการภายนอกอย่าง Google Tag Manager ไม่จำเป็นต้องแก้โค้ดบนเซิร์ฟเวอร์ เพราะถ้าต้องแก้โค้ดเซิร์ฟเวอร์ อาจต้องผ่านกระบวนการอนุมัติมากมายกว่าจะ fix ได้ ยิ่งหนักกว่าเดิม อ่านแล้วก็พยักหน้า สมัยผมทำงานอยู่ Rakuten Card ก็อารมณ์นี้เลย แก้สีจุดเดียว ต้องผ่านประชุมสามครั้ง ผ่านทีม QA กว่าจะได้รีลีสก็หนึ่งสัปดาห์ให้หลัง เป็นปัญหาฝังรากลึกขององค์กรใหญ่ๆ จริงๆ

สรุป เห็นวิธีแก้ปัญหาแบบนี้แล้วก็ไม่อยากคิดเลยว่าระบบหลังบ้านจะเน่าขนาดไหน ผมล่ะขอบายไม่ใช้บริการ 7pay แน่นอนครับ