10 วิธีเพิ่มความปลอดภัยในการพัฒนาซอฟต์แวร์
ในโลกปัจจุบันมีการใช้งานซอฟต์แวร์อยู่เกือบทุกวัน หลายอุตสาหกรรมนั้นล้วนหันมาใช้งานซอฟต์แวร์เพื่อช่วยแก้ปัญหาที่พบเจอ ช่วยลดค่าใช้จ่ายแถมยังช่วยรองรับลูกค้าอีกด้วย เมื่อมีซอฟต์แวร์เกิดขึ้นมาเยอะก็ต้องมีผู้ไม่หวังดีกับระบบเกิดขึ้นมา ซึ่งอาจจะทำให้ระบบใช้งานไม่ได้ หรืออาจจะมาเพื่อเอาข้อมูลสำคัญ ในมุมมองของนักพัฒนาจะมีวิธีการใดกันบ้างเพื่อช่วยป้องกันผู้ไม่หวังดีกับระบบ วันนี้ก็จะพามาดู 10 วิธีที่ควรทำเพื่อให้ระบบนั้นมีความปลอดภัยมากยิ่งขึ้น
1. Secure Coding Practices
1. ฝึกฝนให้ทีม developer มีการเขียนโค้ดที่ปลอดภัยตามหลักการ จะช่วยการป้องกันการโจมตีจากช่องโหว่ เช่น (injection attacks, buffer overflows)
2. ปฏิบัติตามหลักเกณฑ์การเขียนโค้ดอย่างปลอดภัย
-
-
-
ทำ input validation เสมอ อย่าใว้ใจข้อมูล input จากผู้ใช้
-
มีการออกแบบที่เป็นเอกลักษณ์ และมีความปลอดภัยด้วย
-
ทำให้ระบบใช้งานง่าย เป็นพื้นฐาน แต่มีประสิทธิภาพ
-
ใช้ช่องทางการสื่อสารที่ปลอดภัย ทั้งภายในบริษัทและกับลูกค้า
-
ตรวจสอบคุณภาพของโค้ดและปฏิบัติตาม code standards
-
-
2. Code Reviews
Credit: https://unsplash.com/photos/a-computer-screen-with-a-bunch-of-code-on-it-ieic5Tq8YMk
1. ทำการตรวจสอบโค้ดเป็นประจำโดยเน้นที่ความปลอดภัย ในทุกๆครั้งที่จะนำโค้ดไปรวมไว้ที่ส่วน Main Branch หรือ Production Branch
2. ใช้เครื่องมือ automate testing เพื่อลดเวลาที่ใช้ในการทดสอบ
3. ทุกคนในทีมควรมีการรีวิวโค้ดของคนอื่น เพื่อทำให้เข้าใจโค้ดและเป็นไปตาม code standards
3. Authentication and Authorization
1. พัฒนาระบบยืนยันตัวตนที่เข้มงวดเพื่อให้แน่ใจว่าผู้ใช้มีข้อมูลอยู่ในระบบและสามารถที่จะใช้ระบบได้
2. ใช้ระบบจำกัดสิทธิ์ในการเข้าถึง เพื่อให้ผู้ใช้สามารถเข้าไปยังเนื้อหาที่จำเป็นสำหรับผู้ใช้
4. Data Encryption
Credit: https://unsplash.com/photos/a-golden-padlock-sitting-on-top-of-a-keyboard-FnA5pAzqhMM
1. ใช้การเข้ารหัสข้อมูลทั้งขารับและขาส่ง
2. มีการจัดเก็บข้อมูล secret key ที่ปลอดภัย ซึ่งสามารถจัดเก็บผ่านผู้ให้บริการ cloud provider เช่น AWS Secrets Manager, Google cloud Secret Manager, Azure Key Vault
5. Input Validation
Credit : https://i.stack.imgur.com/0Smzi.png
1. มีการทำ validate ข้อมูลที่ผู้ใช้ทุกคนจะกรอกเข้ามาเพื่อเป็นการป้องกัน injection attacks
2. ใช้ parameterized queries เพื่อปกป้องการเกิด SQL injection
6. Error Handling:
1. พัฒนา error handling เพื่อหลีกเลี่ยงการเปิดเผยข้อมูลที่มีความอ่อนไหว หรือข้อมูลสำคัญ
2. เวลาเกิดข้อผิดพลาด ให้ใช้ข้อความทั่วไปเพื่อให้เป็นการง่าย และผู้ใช้สามารถบันทึกข้อความเพื่อแจ้งแก่ developer ภายหลังได้ง่าย
7. Security Testing
1. ต้องมีการทดสอบระบบทุกครั้งก่อนใช้งาน และรวมถึงการทำ penetration testing และ การทำ code scanning
-
-
-
penetration testing tools
-
Metasploit
-
Wireshark
-
Burp Suite
-
-
code scanning
-
Nikto
-
SonarQube
-
Veracode
-
-
-
8. Dependency Management
1. ให้ทำการอัพเดตเวอร์ชั้นของ library component หรือ tools ที่ใช้ในการพัฒนาอยู่เสมอ
2. คอยตรวจสอบความปลอดภัยของ library ว่ามีความน่าเชื่อถือมากน้อยเพียงใด และสิ่งที่นำมาใช้นั้นไม่ทำให้ระบบทำงานผิดพลาด
9. Incident Response Planning
Credit : https://unsplash.com/photos/man-in-white-long-sleeve-shirt-writing-on-white-board-um1zVjVCtEY
1. มีการวางแผนรับมือเหตุการณ์ที่อาจจะเกิดขึ้นกับระบบ และใช้แผนการนั้นรับมือหากเกิดสถานการณ์นั้น
2. มีการฝึกซ้อมจำลองสถานการณ์ที่อาจจะเกิดขึ้นอยู่เสมอเพื่อให้แน่ใจว่าแผนการที่ใช้รับมือนั้นยังคงทำงานได้ดีอยู่ และเป็นการทบทวนสมาชิกในทีมถึงแผนการและวิธีการรับมือ
10. Software Development Lifecycle (SDLC)
Credit : https://i0.wp.com/melsatar.blog/wp-content/uploads/2012/03/sdlc.png?fit=830%2C374&ssl=1
SDLC เป็นกระบวนการพัฒนาซอฟต์แวร์ที่มุ่งเน้นให้ในส่วนที่สำคัญไม่แพ้จากการพัฒนาหรือเก็บ requirements นั้นก็คือ security โดยในทุกๆขั้นตอนของการพัฒนาซอฟต์แวร์จะใส่ security ไปด้วย ซึ่งการใส่ security ไปนั้นก็จะช่วยให้ทุกๆขั้นตอนมีความปลอดภัยมากยิ่งขึ้นลดช่องโหว่ และ ลดการมาปรับแก้โค้ดเรื่องความปลอดภัยพร้อมในการส่งมอบไปยังลูกค้า
-
เพิ่มการป้องกันความปลอดภัยไปทุกๆรอบของการพัฒนาซอฟต์แวร์ และปรับปรุงให้เหมาะสมกับ development framework ที่ใช้งาน
-
วางแผนการทำงานล่วงหน้าของระบบ เพื่อป้องกันความเสี่ยงที่อาจจะเกิดขึ้นในระหว่างการพัฒนาซอฟต์แวร์
ทั้งนี้จากข้อมูลที่ได้เขียนไปอาจจะเป็นแค่ส่วนหนึ่งที่สามารถช่วยในการป้องกันระบบไม่ให้เกิดการทำงานผิดพลาด และปกป้องระบบจากบุคคลผู้ไม่หวังดี ทำให้ผู้ไม่หวังดีเจาะเข้ามาในระบบยากขึ้น อย่างไรก็ตามในการพัฒนายังต้องมีองค์ประกอบอื่นๆที่ต้องใส่ใจกันมากยิ่งขึ้นเพื่อทำให้ระบบของเรานั้นทำงานได้อย่างปลอดภัยและมีประสิทธิภาพ