1. พยายามอย่าใช้
eval()
ในการรันโค้ด เพราะมีโอกาสที่ผู้ไม่หวังดีสามารถรันโค้ดที่เป็นอันตรายได้จากคำสั่งนี้หากว่า คุณใช้
eval()
รับข้อมูลไม่รู้ชนิดข้อมูลเช่นa = eval(input('Data : '))คุณควรใช้
ast.literal_eval()
แทนดังนี้import ast
a = ast.literal_eval(input('Data : '))
2. พยายามอย่าใช้
exec()
ด้วยเหตุผลเดียวกันกับข้อ 13. ข้อมูลความลับสำคัญ เช่น 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

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 ความคิดเห็น:
แสดงความคิดเห็น
แสดงความคิดเห็นได้ครับ :)