วันนี้ไปเดินดูหนังสือ งานศิลปะ และ กินชาเย็น ที่หอศิลป์กรุงเทพมหานคร
โดยวันนี้เจอหนังสือมือสองชื่อว่า INNOCENT CODE มาขาย
ในราคา 10 บาท ย้ำว่าราคา 10 บาท (ผมถามกับคนขายไป 4-5 รอบ)
ที่ผมตกใจเพราะว่า คุณค่าที่อยู่ในหนังสือนั้นมันเยอะมากๆ
ดังนั้น มาดูกันว่าในหนังสือเล่มนี้มีอะไรบ้าง

คนขายหนังสือบอกว่า ขายหนังสือถูกๆ เพื่อช่วยลดขยะนะ

หนังสือ INNOCENT CODE (Security wake up call for web programmer)
เป็นหนังสือเล่มแรกๆ ที่ผมอ่าน ตอนเริ่มศึกษาเรื่อง Security ของ Web application
book

ถึงแม้ว่าหนังสือจะเก่าไปสักนิด เพราะว่าหนังสือมันออกมาตั้งแต่ปี 2004
แต่เรื่องเนื้อหาแล้วนั้น ยังคงความขลังอยู่เสมอ (เก่าแต่ยังเก๋า)
และหนังสือเล่มนี้เหมาะมาก สำหรับนักพัฒนามือใหม่ทุกๆ คน
เพราะว่า มันคือความรู้พื้นฐานเรื่อง security ที่นักพัฒนาทุกคนต้องเข้าใจ
เรียกได้ว่าต้องอ่านและทำความเข้าใจกันมากครับ

เนื้อหาของหนังสือเล่มนี้ สามารถสรุปกฎออกมาได้ 27 ข้อ ดังนี้

1. อย่าประเมินความสามารถของผู้บุกรุกต่ำเกินไป ( พลังด้านมึดมันน่ากลัวมาก )
2. แนะนำให้ใช้ HTTP POST เมื่อต้องการเปลี่ยนแปลงข้อมูลต่างๆ ของระบบ
3. อย่าไว้ใจข้อมูลที่ส่งมาจากฝั่งผู้ใช้งาน (Client side)
4. อย่าใช้ข้อมูลใน Referer header มาใช้ทำการ authentication และ authorisation
5. ควรที่จะสร้าง session id ใหม่ เมื่อผู้ใช้งานทำการ login เข้าระบบ
6. อย่าส่งรายละเอียดของความผิดพลาดไปยังผู้ใช้งาน
7. ตรวจสอบข้อมูล ก่อนที่จะส่งไปให้ระบบอื่นๆ ก่อนเสมอ
8. ตรวจสอบข้อมูล ที่ได้รับมาจากระบบอื่นๆ ก่อนนำไปใช้งานก่อนเสมอ
9. ควรมีระบบตรวจสอบข้อมูลเพียงที่เดียว ไม่กระจัดกระจาย เพราะว่าสามารถจัดการได้ง่าย
10. ในการตรวจสอบข้อมูล ต้องดูด้วยว่าระบบที่นำไปใช้งานคืออะไร เพื่อให้การตรวจสอบข้อมูลเหมาะสม
11. ต้องใช้ความพยายามอย่างมากในการต่อสู้กับการโจมตีรูปแบบต่างๆ เพราะว่าการต้องมีการเตรียมพร้อมในหลายๆ ส่วน ไม่ใช่เพียงการ coding เท่านั้น
12. อย่าเชื่อเอกสารของ API มากนัก เพราะว่ามันอาจจะผิดก็ได้ ดังนั้นต้องมีการตรวจสอบอยู่เสมอ
13. ต้องทำการตรวจสอบที่มาของข้อมูลเข้าเสมอ ห้ามละเลย ว่ามาจากที่เราอนุญาตไว้หรือไม่
14. ต้องทำการตรวจสอบข้อมูลเข้าทุกๆ ตัว เสมอ โดยไม่มีข้อยกเว้น
15. ในการกรองข้อมูล ให้ใช้วิธีการ whitelist นะ
16. อย่าอนุญาตให้ข้อมูลเข้าที่มันไม่ถูกต้อง ทำงานโดยเด็ดขาด บางครั้งระบบชอบไปลบข้อมูลที่ไม่ถูกต้อง แล้วให้ทำงานต่อไป ซึ่งน่ากลัวมากๆ
17. ระบบงานต้องมีการเก็บ logging ในการใช้งานระบบทั้งหมดไว้เสมอ
18. อย่าทำการตรวจสอบข้อมูลในฝั่ง client เพียงอย่างเดียวโดยเด็ดขาด
19. ถ้าเป็นไปได้ อย่าใช้ข้อมูลที่ส่งมาจากผู้ใช้งาน มาทำงานโดยตรง
20. ระหว่าง client และ server ควรส่งข้อมูลให้มีขนาดเล็กมากที่สุดเท่าที่จะทำได้
21. อย่าคิดว่า request ของผู้ใช้งานจะมาเรียงต่อกัน  หรือมาในแบบเดิมเสมอนะ เพราะว่าผู้ใช้งานสามารถทำได้มากกว่านั้น
22. ต้องทำการกรองข้อมูล ก่อนนำไปแสดงผลเสมอ
23. ในการเข้ารหัสข้อมูล ควรใช้ algorithm ที่เป็นมาตรฐาน
24. อย่าเก็บข้อมูล password ในรูปแบบ plain-text หรือเข้ารหัสแบบง่ายๆ โดยเด็ดขาด
25. อย่างส่งข้อมูลที่มีความสำคัญผ่าน HTTP GET โดยเด็ดขาด
26. จำไว้ว่า code ทุกๆ ตัวในฝั่ง server นั้นสามารถถูกโจมตีได้เสมอ
27. จำไว้ว่า security มันไม่ใช่ product แต่มันคือ process ที่ต้องเกิดขึ้นอยู่ตลอดเวลา

หนังสือเล่มนี้ เปรียบได้กับยาสามัญประจำบ้าน ที่ต้องมีไว้เสมอครับ