10 วิธีเขียน Python ให้มีความปลอดภัยมากขึ้น

ในโลกอินเทอร์เน็ต ข้อมูลทุกอย่างที่เราใช้งาน หรือ การจัดเก็บข้อมูลไว้ มีสิทธิ์ที่อาจจะถูกขโมยได้ ไม่ว่าจะเป็น ข้อมูลส่วนตัว รหัสผ่าน หรือ แม้กระทั้งข้อมูลทางการเงิน ฯลฯ ดังนั้นองค์กรหรือบริษัทใด ๆ ที่มีการนำข้อมูลขึ้นเว็บไซต์ จำเป็นจะต้องให้โปรแกรมเมอร์ หรือ ผู้พัฒนาโปรแกรม เขียนโปรแกรมเพื่อทำเว็บไซต์ขึ้นมา โดยที่ต้องมีความปลอดภัยมากเพียงพอที่จะรับมือกับภัยคุกคามที่อาจจะเกิดขึ้นได้ในอนาคต 

ถึงแม้ว่าการเขียนโค้ดให้มีความปลอดภัยจะเป็นเรื่องยาก แต่เราก็ควรทำ เนื่องจากหากไม่มีการป้องกันที่ดี ก็อาจกลายเป็นช่องโหว่ให้แฮกเกอร์เข้ามาโจมตีเราได้ ในบทความนี้จะยกตัวอย่างการเขียนโปรแกรมภาษา Python ให้มีความปลอดภัยทั้งหมด 10 วิธี ดังนี้

1.ใช้ Python เวอร์ชั่นล่าสุด

ณ ปัจจุบัน โปรแกรมภาษา  Python ออกมาเป็นเวอร์ชัน 3 แล้ว ซึ่งเวอร์ชันนี้ได้ถูกปล่อยออกมาตั้งแต่เดือนธันวาคม 2008 และยังเป็นเวอร์ชั่นที่ใช้มาจนถึงปัจจุบัน แต่ยังมีบางรายที่ยังใช้เวอร์ชันเก่าอยู่ นั่นคือ Python 2.7 ควรอัปเดตเวอร์ชันให้เป็นปัจจุบัน เนื่องจาก Python 2.7 จะมีบางฟีเจอร์ที่กลายเป็นช่องโหว่ให้แฮกเกอร์เข้ามาแฮกได้  เช่น ฟีเจอร์การป้อนข้อมูล เป็นต้น

หากต้องการทราบข้อมูลเกี่ยวกับ Python เวอร์ชั่นล่าสุด  สามารถเข้าไปอ่านได้ที่ python.org  และหากไม่แน่ใจว่ากำลังใช้ Python เวอร์ชั่นใดอยู่ ให้รันคำสั่งนี้บนเครื่องคอมพิวเตอร์เพื่อตรวจสอบ:

python –version

2. ใช้ Virtual Environment

สำหรับการติดตั้งแพ็คเกจต่าง ๆ บนเครื่อง แนะนำให้ใช้ Virtual Environment สำหรับแต่ละโปรเจ็กต์ไปเลย เพราะ กรณีที่มีการติดตั้งแพ็จเกจที่มีไวรัสโปรเจ็กต์หนึ่งตัว ก็จะไม่ส่งผลกระทบต่อโปรเจ็กต์อื่น ๆ เนื่องจากแพ็กเกจของแต่ละโปรเจ็กต์แยกจากกัน

ยกตัวอย่างเช่น 

การติดตั้งใน command คือ:

pip install virtualenv

เปิดใช้งาน command นี้ใน location ของโปรเจ็กต์:

venv\Scripts\activate.bat

อีกวิธีหนึ่ง สามารถเข้าไปดูได้ที่ https://github.com/pypa/pipenv ซึ่งมีเครื่องมือมากมายใน การพัฒนาแอปพลิเคชั่นที่มีความปลอดภัยด้วย

3. การตั้งค่า debug = false

สำหรับ Python Framework บางตัว เช่น Django จะมี Debug ที่มีการตั้งค่าเป็น true  เป็นค่าเริ่มต้นสำหรับโปรเจ็กต์ใหม่ ซึ่ง Debug นี้จะมีประโยชน์อย่างมากสำหรับผู้พัฒนาโปรแกรม เนื่องจากมันจะแสดงผลข้อผิดพลาดที่เกิดจากการเขียนโค๊ด (Bug) เพื่อช่วยให้สามารถแก้ไขและปิดข้อผิดพลาดได้ง่ายขึ้น แต่มักไม่ค่อยมีประโยชน์ตอนที่เราจะนำโปรเจ็กต์ขึ้นใช้งานบนเซิร์ฟเวอร์และเผยแพร่สู่สาธารณะ การแสดง error ใน code เป็นการเปิดช่องโหว่ทางด้านความปลอดภัยซึ่งทำให้ code ของเราเสี่ยงที่จะถูกแฮกได้ในอนาคต

ดังนั้นเมื่อใช้งานจริง ให้ตั้งค่าในโค้ดต่อไปนี้เสมอ:

Debug = false

4. ห้าม commit สิ่งใดก็ตามที่เป็นรหัสผ่าน

โดยส่วนใหญ่แล้ว นักพัฒนาโปรแกรมจะใช้ GitHub เป็นเครื่องมือช่วยในการพัฒนาซอฟแวร์ เมื่อมีการ commit file ให้ตรวจสอบอีกครั้งว่าไม่ได้ระบุรหัสผ่านในโค้ดที่ลง GitHub มิฉะนั้นรหัสผ่านจะอยู่ในฐานข้อมูลที่เผยแพร่ต่อสาธารณะ ยกตัวอย่างเช่น แฮกเกอร์ขโมยรหัสผ่านนับร้อยที่บันทึกเป็นข้อความธรรมดาที่เก็บใน GitHub และเรียกค่าไถ่ 0.1 Bitcoin ต่อรายการ 

สามารถใช้ Git-Secrets (https://github.com/awslabs/git-secrets) เพื่อช่วยป้องกันการส่งรหัสผ่านหรือข้อมูลที่ละเอียดอ่อนอื่น ๆ ไปยัง GitHub 

5. ระวังแพ็คเกจที่ติดไวรัส

ควรตรวจสอบตัวเองว่ากำลังใช้แพ็คเกจที่ถูกต้องและอัปเดตแล้วหรือไม่ เพราะมีความเป็นไปได้ที่เราอาจจะติดตั้งแพ็คเกจ Python ที่มีไวรัสอยู่ภายในและใช้แพ็คเกจที่แฮกเกอร์สร้างมาเพื่อหลอก เช่น 00Seven  เป็นแพ็คเกจปลอมที่คล้ายเหมือน 000Seven ที่เป็นของจริง เพราะฉะนั้นควรตรวจสอบก่อนเสมอว่าแพ็คเกจที่นำมาใช้มีความน่าเชื่อถือ และเป็นแพ็คเกจที่ถูกต้องแล้วหรือไม่

หรือสามารถตรวจสอบชื่อแพ็คเกจได้ที่  ยังสามารถใช้แพลตฟอร์ม sqreen สำหรับตรวจสอบแอปพลิเคชัน หรือ เว็บไซต์ของตัวเองว่า มีแพ็คเกจที่มีโค้ดอันตรายหรือไม่

6. ตรวจสอบ import path

import path ใน Python มีสามประเภทได้แก่ absolute, relative และ implicit

การสร้าง implicit path จะไม่เจาะจงที่อยู่ของแพ็คเกจ ดังนั้นโปรแกรมอาจใช้โมดูลที่มีชื่อเดียวกันกับที่อยู่ของข้อมูลของคุณ การดำเนินการนี้อาจทำให้ถูกติดไวรัสได้

เพราะฉะนั้นให้ใช้ absolute path เพื่อหลีกเลี่ยงความเสี่ยงดังกล่าว ถ้าเราใช้ที่อยู่แบบเต็มของแพ็คเกจเราก็รู้อย่างชัดเจนถึงแพ็คเกจที่ถูกต้องที่จะใช้ และจะได้รับการตรวจสอบโค้ดเพื่อให้มีความปลอดภัย

7. ป้องกันการโจมตีแบบ SQL injections

SQL injections เป็นเทคนิคการแทรกโค้ดที่อาจทำลายฐานข้อมูล ซึ่งเป็นหนึ่งในเทคนิคการแฮกเว็บที่พบบ่อยที่สุด วิธีการคือการวางโค้ดที่เป็นอันตรายในคำสั่ง SQL ผ่านการป้อนข้อมูลหน้าเว็บ ดังนั้น ควรระวังภัยของ SQL injection อย่างจริงจังและปฏิบัติตามขั้นตอนที่อัปเดตในการปกป้องฐานข้อมูลของคุณจากการ SQL injections

อ่านเพิ่มเติมได้ที่นี่: https://blog.sqreen.com/preventing-sql-injections-in-python/

8.ใช้ pycryptodome สำหรับการเข้ารหัส

ให้หยุดใช้การเข้ารหัสแบบ pycrypto เพราะการเข้้ารหัสแบบนี้มีช่องโหว่และยังไม่มีการอัปเดตเวอร์ชันสำหรับการแก้ไขปิดช่องโหว่ออกมาเลย แนะนำให้เปลี่ยนไปใช้แทน pycryptodome จะปลอดภัยมากขึ้น สามารถติดตั้งโดยใช้คำสั่ง 

pip install pycryptodome

อ่านรายละเอียดของ pycryptodome ได้ที่ https://pycryptodome.readthedocs.io/en/latest

9. ใช้ Bandit

การติดตั้งแพ็คเกจ Bandit สำหรับแต่ละโปรเจ็กต์ Python Bandit จะช่วยสแกนโค้ดเพื่อหาช่องโหว่ เช่น ปัญหาทั่วไปเกี่ยวกับ YAML ฯลฯ เมื่อยิ่งพบช่องโหว่ไวเท่าใด ก็จะสามารถแก้ไขได้ทันนั่นเอง

10. ปรับปรุงเซิร์ฟเวอร์ของตัวเองให้ทันสมัยอยู่เสมอ

บางครั้งภัยคุกคามไม่ได้เกิดขึ้นจากช่องโหว่ของการเขียนโค้ดเพียงอย่างเดียว แต่เกี่ยวข้องกับเซิร์ฟเวอร์ด้วย ดังนั้นต้องตรวจสอบว่าซอฟต์แวร์ทั้งหมดได้รับการอัปเดตและใช้ได้กับโค้ดของ Python หรือไม่ เพราะบางครั้งโปรแกรมเมอร์อาจมีความผิดพลาดที่ไม่รู้ตัว จนทำให้เกิดช่องโหว่ให้แฮกเกอร์เข้ามาทำลายข้อมูลสำคัญต่าง ๆ ได้ จึงควรตรวจสอบให้แน่ใจอยู่เสมอว่าซอฟต์แวร์และระบบการจัดการความปลอดภัยเป็นปัจจุบันหรือไม่

10 วิธีที่กล่าวมานั้น เป็นวิธีการที่ทีมงานรวบรวมเพื่อเพิ่มความปลอดภัยสำหรับการเขียนโปรแกรม Python มากขึ้น และเนื่องด้วยโปรแกรมภาษา Python เป็นภาษาที่เขียนตั้งแต่เว็บไซต์ ไปจนถึงแอปพลิเคชันทุกรูปแบบและเป็นที่นิยมนำมาใช้ในการทำ Big Data อีกด้วย เพราะ ใช้งานง่าย โครงสร้างข้อมูลที่อ่านง่าย มีความยืดหยุ่นในการใช้งาน ฯลฯ ก็ย่อมตกเป็นเป้าของแฮกเกอร์พยายามเข้ามาโจมตี ในฐานะนักโปรแกรมเมอร์ หรือ ผู้ดูแลระบบไอที จำเป็นอย่างยิ่งที่จะต้องมีวิธีป้องกันภัยคุกคามอยู่เสมอ อย่าลืมว่าแฮกเกอร์มีความพยายามในการหาช่องโหว่เข้ามาโจมตีมากเพียงใด เราก็ต้องตั้งรับเพื่อป้องกันเว็บเซิร์ฟเวอร์ เว็บไซต์ หรือ ระบบ ก่อนที่จะเกิดความเสียหายอย่างคาดไม่ถึง

เขียนโดย

เจตณัฐ นครเขตต์
นักศึกษาฝึกงาน จาก มหาวิทยาลัยพระจอมเกล้าพระนครเหนือ

ที่มา: https://blog.sqreen.com/top-10-python-security-best-practices/