17 เคล็ดลับ การเขียน Code ให้ปลอดภัย

03-ส.ค.-18

คัมภีร์เทพ IT

สำหรับคนที่เป็น Programmer / Developer นอกจากการเขียน Code ให้ Clean แล้ว ความปลอดภัยก็ถือเป็นอีก 1 เรื่องที่ควรให้ความสำคัญเป็นอย่างมาก วันนี้ทีมงานมีบทความเกี่ยวกับ 17 เคล็ดลับ การเขียน Code ให้ปลอดภัย มาให้ลองนำไปปรับใช้กันดูครับ
1. ทดสอบในเรื่องการ Input อย่างเข้มงวด
บางครั้งข้อมูลที่ Input เข้าไปโดยเฉพาะถ้า Software ที่มีการรับ Input ผ่านทาง Internet ด้วยแล้ว ยิ่งต้องระวังเป็นอย่างมาก ตัวอย่างแรก คือเรื่องของ Buffer Overflow จากการ Coding ด้วยภาษา C คือ ถ้ามีการ Input ข้อมูลลงใน Buffer (Memory) เกินไปจากที่จองไว้ ก็อาจทำให้ประมวลผลผิดพลาดได้ อีกตัวอย่างคือ เรื่อง SQL injection หากคุณไม่มีการป้องกันที่ดี ก็อาจทำให้ Attackers เข้าถึง Database ของคุณได้โดยตรง ดังนั้นคุณควรทดสอบในเรื่องของ Size และ Structure ของข้อมูลที่จะถูก Input เข้ามาด้วย 
2. เก็บข้อมูลที่จำเป็น
ถ้าคุณสามารถสื่อสารกับลูกค้าของคุณผ่านทาง Email ได้ มันจะสะดวกกว่าการส่งจดหมายไหม ลองเปรียบเทียบดูว่าเก็บข้อมูล Email กับที่อยู่ของลูกค้า แบบไหนจะต้องใช้เนื้อที่ในการเก็บข้อมูลมากกว่ากัน Programmer ส่วนใหญ่มักมีสัญชาตญาณที่จะเก็บข้อมูลให้มากไว้ก่อน(เผื่อใช้ประโยชน์ภายหลัง) ซึ่งมันก็เป็นเรื่องดี แต่ถ้ามีข้อมูลใน Database มากๆ ก็อาจกลายเป็นต้องใช้เนื้อที่ไปโดยไม่จำเป็นและอาจล่อใจเหล่า Hacker ได้เช่นกัน
3. ความปลอดภัยเกี่ยวกับ Password
ปัจจุบันหลายๆ บริษัท มีการใช้งานแบบ N-factor Authentication ซึ่งอาจเป็นการส่งกลุ่มตัวเลขหรืออักษรไปให้ผู้ใช้ผ่าน SMS แล้วให้ผู้ใช้กรอกพร้อมกับใส่ Password ซึ่งมันเป็นวิธีที่ดี(ถ้าคุณไม่ได้ลืมโทรศัพท์ไว้ที่บ้าน) คุณอาจเพิ่มความปลอดภัยมากขึ้นด้วยวิธีอื่นๆ เช่น จำ IP address ของผู้ใช้ไว้ หากเป็น IP อื่นๆ อาจมีการส่ง Email แจ้งผู้ใช้ เป็นต้น ไม่มีวิธีไหนที่ Perfect เสมอไป อยู่ที่คุณจะเลือกวิธีที่เหมาะสม
4. เจรจาต่อรองเกี่ยวกับ Requirements
เมื่อ Manager ร่าง Requirements ได้พูดคุยกับ Developers แล้ว ทุกคนควรพิจารณาว่า Requirements แต่ละข้อสามารถนำไปสู่ปัญหาใดได้อีกบ้าง เช่น Feature ดีมาก แต่มันทำให้คุณต้องเก็บข้อมูลสำคัญๆ เพิ่มเติมไหม หรือต้องเพิ่มระดับของ Security ไปทุกที่ไหม เป็นต้น ดังนั้น ก่อนจะมีการยืนยันเกี่ยวกับ Requirements ที่แน่ชัด ควรชี้ประเด็นเรื่องความปลอดภัยหรือปัญหาที่อาจตามมาในอนาคตให้ทุกฝ่ายที่เกี่ยวข้องทราบก่อน 
5. เพิ่มการ Delay ลงใน Code ของคุณด้วย 
คนที่ต้องการโจมตี อาจปลอมเป็น User เพื่อเจาะ Database หรือพยายามสุ่ม Password จนกว่าจะเข้าระบบได้ เคล็ดลับคือ การเพิ่มการ Delay ลงใน Code ของคุณด้วยเพื่อสร้างความสับสนให้กับ Bots ในบางกรณีก็ไม่จำเป็นที่ Software จะต้องเร็วเสมอไป แค่ให้เร็วเพียงพอสำหรับมนุษย์แต่ช้ามากสำหรับพวก Bots เช่น บาง Database จะกำหนดจำนวนของ Query ที่มาจาก IP address เดียวกัน หรือบางระบบจงใจส่ง Email Request ให้ User เพื่อทำให้ Process ดำเนินการช้าลง ซึ่งมักไม่ส่งผลต่อมนุษย์ต่อส่งผลกับ Bots ที่เข้ามา
6. ใช้การ Encryption ให้มากกว่าที่คิดและควรจะเป็น
การ Encryption มักมีการใช้งานที่ไม่บ่อยนักเนื่องจากเป็นการเพิ่มขั้นตอน และทำให้ Debug ได้ยากขึ้น แต่ก็เพียงพอที่จะหา Errors ในระบบได้ และจะยากยิ่งขึ้นเมื่อ Data นั้นเป็นสิ่งที่คาดเดาได้ยาก นั่นคือ ถ้ามันยากสำหรับคุณ ก็ย่อมยากกับพวก Attackers ด้วย การมีจำนวนที่เหมาะสมของ Encryption จะไม่ลดประสิทธิภาพการทำงานลง
7. สร้าง Walls
คนส่วนใหญ่มักไม่ชอบที่ต้อง Login บ่อยๆ เมื่อต้องเข้าสู่ส่วนย่อยต่างๆ ของระบบ ซึ่งนั่นอาจก่ออันตรายกับ System ด้วย เพียงแค่จุดอ่อน 1 จุดก็สามารถสร้างความเสียหายไปทั้งระบบได้ การหาจุดที่พอดีมันอาจจะยาก แต่อย่าลืมว่ายิ่งคุณทำให้ง่ายต่อ User เท่าไรยิ่งทำให้ง่ายต่อ Attackers ด้วย วิธีแก้คือ คุณอาจจะแยกระบบที่สำคัญจริงๆ ออกมาก็ได้ และถ้าจะใช้ระบบนี้ก็ต้อง Login เข้าใช้งาน
8. ใช้ Library ที่ผ่านการทดสอบมาดีแล้ว
การ Encryption อาจเป็นเรื่องที่ยากสักหน่อย และแม้จะเป็นทฤษฎีที่ดีและสร้าง Code อย่างระมัดระแล้วก็ตาม แต่ก็อาจมีช่องโหว่ได้อยู่ดี โดยทั่วไปมักจะเกิดความผิดพลาดหากคุณไปแก้ไข Library ที่ผ่านการทดสอบมาอย่างดีแล้ว และมักเกิดปัญหาในการ Encryption ตามมาด้วย ดังนั้น การเลือกใช้ Library ที่ผ่านการทดสอบมาอย่างดีแล้ว ถือเป็นเรื่องที่สำคัญในเรื่องของความปลอดภัยด้วย
9. ใช้ Internal APIs
การแบ่ง Code ออกเป็น Module และบังคับให้ Communicate ผ่าน APIs ที่ถูกออกแบบมาอย่างดีแล้ว ถือเป็นสิ่งที่ทุกคนได้เรียนรู้กันมาตั้งแต่เริ่มทำงาน ความปลอดภัยเป็นสิ่งที่ถูกให้ความสำคัญมากขึ้น เพราะ APIs ช่วยให้การตรวจสอบ หาช่องโหว่ และแก้ไขปัญหา สามารถทำได้ง่ายขึ้น Module ต่างๆ ก็สามารถถูกตรวจสอบได้ง่ายขึ้น ดังนั้น จึงสมเหตุสมผลที่ควรจะสร้าง Internal Submodules (รวมทั้ง Modules ด้วย) ซึ่งมันทำให้ง่ายในการตรวจสอบเป็นส่วนๆ 
10. ให้คนภายนอกมา Audit Code ของคุณ
หากองค์กรของคุณสร้าง Software ในระดับ Enterprise แล้ว การลงทุนในเรื่องการ Audit Code จึงเป็นสิ่งที่ควรทำ ซึ่งวิธีนี้จะสามารถช่วยระบุข้อบกพร่องและมี suggestion ให้เพื่อใช้ในการปรับปรุง Code ด้วย เพราะบางครั้งคนในเองอาจมองข้ามในบางเรื่องไป แต่คนภายนอกสามารถมองเห็นข้อบกพร่องได้มากกว่า 
11. Code analyzers คือเพื่อนที่ดีของคุณ
แม้มันจะไม่ Perfect และทำได้เหมือนมนุษย์ แต่มันก็คุ้มที่จะใช้ Code analyzers ซึ่ง Tools อย่าง FindBugs (โดย University of Maryland) เองก็สามารถหาข้อผิดพลาดที่เราอาจทำขึ้นโดยไม่ตั้งใจได้ ข้อผิดพลาดเหล่านี้อาจมีส่วนเกี่ยวข้องกับความปลอดภัยไม่มากนัก แต่อาจส่งผลร้ายแรงได้เช่นกัน
12. จำกัดสิทธิ์การใช้งาน
Developers มักคิดเผื่อล่วงหน้า และการให้สิทธิ์บางคนในการเข้าถึงได้ทุกอย่างเท่าที่จำเป็น ดูจะเป็นวิธีที่ง่ายในการวางแผนสำหรับอนาคตด้วย คุณอาจคิดว่า ในเมื่อคนเหล่านั้นมีส่วนร่วมใน Project ตั้งแต่ต้น ทำไมถึงจะให้พวกเขาอ่าน Database ทั้งหมดและ Commit Code ไม่ได้ล่ะ? ถ้ามีสักคนที่อยู่ในทีมพัฒนา Project อยากเข้าถึง Database ทำไมถึงไม่ให้ Code ที่จะ Login เพื่อเข้าไป Read, Write และ Update ล่ะ? หลักการที่เหมาะสม คือการให้ Code แก่จำนวนคนที่น้อยที่สุดในการเข้าถึงสิทธิ์ที่จำเป็นต่อพวกเขาเท่านั้น 
13. สร้าง Model สำหรับการคุกคามด้านไอทีแบบต่างๆ
การใช้เวลาคิดว่า “ใคร” ที่น่าจะอยากได้ข้อมูลของคุณ ถือเป็นจุดเริ่มต้นที่มีประโยชน์ หากคุณสามารถจินตนาการถึงภัยคุกคามล่วงหน้าได้ และรู้ว่า Attackers คิดอะไรในขณะที่คุณออกแบบและ Implement ระบบ คุณจะได้หาทางหลีกเลี่ยงล่วงหน้าได้ ที่สำคัญควรรู้ไว้ว่า ไม่มี Model ไหน Perfect หรอก สิ่งใดที่คุณคิดไม่ถึง ก็ไม่ได้แปลว่า มันจะไม่เกิดหรือไม่มี 
14. สร้างความน่าเชื่อถือ ทั้ง 2 ฝ่าย
เป็นเรื่องง่ายที่ระแวงว่า มีใครบ้างที่เข้าเว็บไซต์ของคุณ แต่คุณต้องรู้ไว้ด้วยว่า User ก็ระแวงคุณด้วยเช่นกัน ว่าคุณเป็นธนาคารที่เก็บเงินเขาจริงหรือไม่ หรือ คุณเป็นพวก Phishing เว็บไซต์ ที่พยายามจะขโมยข้อมูลทุกอย่างของพวกเขา บางเว็บไซต์ก็มีการลงทุนในการพิสูจน์ตัวตนให้กับลูกค้าของพวกเขา และเว็บไซต์เองก็ขอให้ลูกค้า Upload รูปภาพหรือกลุ่มของคำ ที่เว็บไซต์สามารถใช้ในการพิสูจน์ว่า ลูกค้าเหล่านั้นเป็นใคร ซึ่งสิ่งนี้ช่วยให้ทุกฝ่ายรู้สึกปลอดภัยยิ่งขึ้น
15. ติดตามข่าวสารการคุกคามด้านไปทีอยู่เสมอ
ติดตามข่าวสารที่จำเป็นที่เกี่ยวกับ Industry บ้าง อย่าง Infoworld เองก็มีบทความดีๆ มากมายที่ช่วยให้คุณเรียนรู้จากข้อผิดพลาดและข้อแนะนำดีๆ จากคนอื่น/ผู้เชี่ยวชาญได้ การทำความเข้าใจกับสิ่งที่เกิดขึ้นในอดีต นับเป็นวิธีที่ดีในการเริ่มต้นการวางแผนป้องกันสำหรับอนาคตหากมี Attackers จะทำแบบในกรณีเดียวกันนี้
16. Research เชิงลึกมากเท่าไรก็ยิ่งดี
บทเรียนที่ดี เกิดขึ้นมาจากการอ่านหนังสือและบทความในวารสารที่เขียนขึ้นโดย Researcher ซึ่งพวกเขาได้คิดและวิเคราะห์เกี่ยวกับสิ่งที่ผิดพลาด ซึ่งมักรวมถึงกฎและวิธีการที่ดีในการหลีกเลี่ยงปัญหาในอนาคต การลงทุนในเรื่องเวลาและเงินเพื่อซื้อหนังสือดีๆ นับเป็นอีกวิธีที่ประหยัดมากเพื่อให้ได้ความรู้กลับมา
17. ศึกษาด้วยตนเองอยู่เสมอ
คุณสามารถหาคอร์สออนไลน์ฟรี จากสถานศึกษาต่างๆ ได้มากมาย ซึ่งเป็นอีกช่องทางหนึ่งที่คุณสามารถเรียนรู้ได้และความรู้เหล่านั้นอาจไม่ได้ถูกกล่าวถึงในหนังสือ บรรดาอาจารย์ที่สอนก็มักจะติดตามสิ่งตีพิมพ์ล่าสุดจากการประชุมทางวิชาการ อาจรวมถึงเชิงอรรถและคำแนะนำต่างๆ หากคุณมีความรู้มากขึ้นแล้ว การเรียนคอร์สเกี่ยวกับการ Audit ก็ช่วยให้คุณ Update ความรู้ต่างๆ ได้มากยิ่งขึ้น
ที่มา:  https://www.infoworld.com/
 

 

รับตำแหน่งงานไอทีใหม่ๆ ด้วยบริการ IT Job Alert

 

อัพเดทบทความจากคนวงในสายไอทีทาง LINE ก่อนใคร
อย่าลืมแอดไลน์ @techstarth เป็นเพื่อนนะคะ

เพิ่มเพื่อน

 

บทความที่เกี่ยวข้อง