Categories
Security

กฏ 27 ข้อ จากหนังสือ INNOCENT CODE

อ่านมาจากบล็อกของคุณ Somkiat Puisungnoen แล้วรู้สึกว่าดีมากเลย เป็นเบสิกด้าน Security ที่ต้องตระหนักในการพัฒนาระบบต่างๆ จึงอยากเก็บไว้เพื่อเตือนตัวเอง, ใช้ในการตรวจสอบระบบงานที่ทำต่อไป ซึ่งพอมาคิดๆดูก็พบว่างานที่เคยเขียนก็ยังมีช่องโหว่หลายอย่างอยู่ ซึ่งตงต้องตามไปปิดให้หมด

ที่มา http://www.somkiat.cc/innocent-code/

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 ที่ต้องเกิดขึ้นอยู่ตลอดเวลา