9 กรกฎาคม 2560

Published กรกฎาคม 09, 2560 by with 0 comment

Python กับ Security : เพิ่มความปลอดภัยให้กับโค้ด

ในการเขียนโปรแกรมใด ๆ สิ่งสำคัญอีกอย่างหนึ่งที่ขาดไม่ได้ นั่นคือ Security หรือ ความปลอดภัย ของโปรแกรม ในภาษา Python คุณสามารถเพิ่มความปลอดภัยให้กับโค้ด Python ของคุณได้ โดยศึกษาจากคำแนะนำ "เพิ่มความปลอดภัยให้กับโค้ด" 11 ข้อ ตามนี้


1. พยายามอย่าใช้ eval() ในการรันโค้ด เพราะมีโอกาสที่ผู้ไม่หวังดีสามารถรันโค้ดที่เป็นอันตรายได้จากคำสั่งนี้

หากว่า คุณใช้ eval() รับข้อมูลไม่รู้ชนิดข้อมูลเช่น
a = eval(input('Data : '))
คุณควรใช้ ast.literal_eval() แทนดังนี้
import ast
a = ast.literal_eval(input('Data : '))

2. พยายามอย่าใช้ exec() ด้วยเหตุผลเดียวกันกับข้อ 1
3. ข้อมูลความลับสำคัญ เช่น OAuth secret , CONSUMER_SECRET และอื่น ๆ เป็นต้น ไม่ควรประกาศข้อมูลตัวแปรใน Python
ตัวอย่างเช่น
OAUTH_SECRET = 'Axdjhxjs55'
ควรเก็บข้อมูลเหล่านี้ไว้ใน environment variable
import os
OAUTH_SECRET = os.environ['OAUTH_SECRET']

หรือเก็บลงในไฟล์แล้วดึงมาใช้งาน
4. อย่าใช้ Pickle กับโค้ดที่ไม่ปลอดภัย (อ่านรายละเอียดได้ที่ http://www.benfrederickson.com/dont-pickle-your-data/ และ https://media.blackhat.com/bh-us-11/Slaviero/BH_US_11_Slaviero_Sour_Pickles_Slides.pdf)
5. อย่าใช้ string formatting สร้าง SQL statements - ให้ใช้รูปแบบอาร์กิวเมนต์ (argument) สองอันของ execute() แทน

ตัวอย่าง
# Never do this -- insecure!
symbol = 'IBM'
c.execute("... where symbol = '%s'" % symbol)

# Do this instead
t = (symbol,)
c.execute('select * from stocks where symbol=?', t)

เพราะอาจเปิดช่องโหว่ทำให้เกิด SQL injection ได้


6. กรอกโค้ดที่เป็นอันตรายก่อนนำเข้าฐานข้อมูลหรือนำไปรันด้วยไลบารี html อ่านเพิ่มเติมได้ที่ ป้องกันการใส่สคริปต์หรือโค้ด HTML ใน Python

7. MD5 ไม่ปลอดภัยในปัจจุบัน สำหรับการทำ hash ข้อมูลหรือรหัสผ่าน คุณควรเลือกใช้ hash ตัวอื่น
8. ใช้ https แทน http ป้องกันการปลอมแปลงข้อมูลและเพิ่มความปลอดภัยในการรับส่งข้อมูล
9. อย่าเพิ่งเชื่อถือข้อมูลจากไฟล์ ข้อมูลที่รับมาจาก open(), urlopen() และอื่น ๆ ต้องผ่านขั้นตอนรับข้อมูลอย่างเข้มงวดเช่นเดียวกับการกรอกข้อมูลจากผู้ใช้งาน
10. สนใจคำเตือนในเอกสาร docs.python.org
สนใจคำเตือนในเอกสาร docs.python.org
11. หา Bug และซ่อมโค้ด ก่อนนำโค้ดไปใช้งานจริง นั่นคือ "ขั้นตอนทดสอบโปรแกรม" อย่าข้ามขั้นตอนนี้ไป

ศึกษาเพิ่มเติมได้ที่ OWASP_Romania_Branca.pdf และ https://www.tripwire.com/state-of-security/off-topic/digging-for-security-bugs-in-python-code/
อ่าน 10 วิธีปฎิบัติในการเขียนโค้ดให้ปลอดภัย

อ้างอิง mail.python.org/pipermail/tutor/2009-October/072150.html และ stackoverflow.com

ติดตามบทความต่อไปนะครับ
ขอบคุณครับ

0 ความคิดเห็น:

แสดงความคิดเห็น

แสดงความคิดเห็นได้ครับ :)