13 ธันวาคม 2557

Published ธันวาคม 13, 2557 by with 0 comment

ป้องกันการใส่สคริปต์หรือโค้ด HTML ใน Python

  ปัจจุบันมีการโจมตีทางอินเทอร์เน็ตอยู่ตลอดเวลา ไม่ว่าจะเป็นการแฮก , social engineer และอื่น ๆ สำหรับเทคโนโลยีบนเว็บแล้ว มีการโจมตีมากมาย หนึ่งในนั้นคือ csrf/xss และช่องโหว่ยอดนิยมของแฮกเกอร์คือ SQL Injection จริง ๆ แล้วไม่ว่าเทคโนโลยีสายไหนก็มีโอกาสถูกโจมตีแบบเดียวกันหมด บทความนี้จะพาผู้อ่านไปป้องกันการใส่โค้ด HTML ใน Python กันครับ
สรุปย่อ ๆ การโจมตีที่พบได้บ่อยในสายเว็บ
  • SQL Injection เป็นการโจมตีด้วยการใส่คำสั่งในภาษา SQL ลงไปในส่วนที่มีการสั่ง Query กับฐานข้อมูลต่าง ๆ ไม่ว่าจะเป็น MySQL, Sqlite และฐานข้อมูลอื่น ๆ ที่ใช้ภาษา SQL เพื่อให้โปรแกรมทำงานผิดพลาดหรือเพื่อให้โปรแกรมทำงานตามคำสั่งที่แฮกเกอร์กำหนด
  • Cross Site Scripting (XSS) เป็นการโจมตีโดยการใส่แทรกสคริปต์หรือแท็ก HTML ลงในหน้าเว็บ
  • Cross Site Request Forgery (CSRF) เป็นการโจมตีโดยใช้วิธีการ Social Engineer เพื่อหลอกให้เหยื่อคลิกลิงค์ Request อะไรบางอย่าง ที่ถูกฝั่งในหน้าเว็บ เพื่อทำการขโมยข้อมูล
ดูเพิ่มเติมได้ที่ http://bit.ly/1yJwn4c ครับ
  ในการเขียนโปรแกรมภาษา Python เราจะสามารถป้องกันได้อย่างไร หนึ่งในวิธีง่าย ๆ ที่สามารถป้องกันการโจมตีนี้ได้แค่ป้องกันการใส่โค้ด HTML ครับ (CSRF ลิงค์จะถูกกรองอีกเป็นแค่ Text แต่ต้องมากรองออกอีกทีหลังจากป้องกันการใส่โค้ด HTML ครับ) พวกลิงค์หรือสคริปต์จะทำอันตรายต่อฐานข้อมูลและโปรแกรมเราไม่ได้
ผมใช้โมดูลมาตรฐานที่มากับ Python ที่มีชื่อว่า html ครับ
ในการกรองสคริปต์หรือโค้ด HTML จะใช้คำสั่ง
html.escape(s, quote=True)
อักษรพิเศษจะกลับแปลงเป็นตัวอักษรที่ปลอดภัยครับ
ยกเลิกการกรองทำได้โดยคำสั่ง (มีใน Python 3.4 ขึ้นไป)
html.unescape(s)
ตัวอย่างการป้องกันการใส่สคริปต์หรือโค้ด HTML ใน Python
>>> import html
>>> s = "<html>65586"
>>> html.escape(s, quote=True)
'&lt;html&gt;65586'
>>> html.unescape(s)
'<html>65586'

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

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

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

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