|
SQL Injection
SQL Injection //xsodusdev.blogspot.com/2015/06/sql-injection.html เขียนโดย Akkapon Somjai ที่ 07:39 จริงๆเรื่องนี้เป็นเรื่องที่เก่ามากเป็น 10 ปีแล้ว และมีการเขียนเรื่องนี้ไว้ทั้งในวิกิและในบล็อกต่างๆเป็นจำนวนมาก หากแต่โปรแกรมเมอร์มือใหม่อาจไม่ค่อยใส่ใจหรือไม่ทราบปัญหาตรงนี้อย่างจริงจังนัก ทั้งที่หากถูกเจาะระบบจากส่วนนี้แล้วจะเกิดความเสียหายอย่างใหญ่หลวงถึงขั้นข้อมูลลูกค้าหายไปจากฐานข้อมูลทั้งหมดได้เลย ผมเลยอยากจะเขียนบทความนี้อีกครั้ง เพื่อให้เป็นความรู้และอยากให้ทุกคนตระหนักถึงปัญหาอย่างจริงจังเสียที
SQL Injection คืออะไร
คือช่องโหว่ที่เกิดจากการส่งผ่านข้อมูลจากผู้ใช้เข้ามายัง SQL โดยตรง ยกตัวอย่างเช่น หากเราจะทำระบบล็อกอินเราก็ต้องรับค่า Username กับ Password ด้วยการเขียนโค้ดแบบนี้
หาก ผู้ใช้ ป้อนค่า username เป็น ชื่อผู้ใช้ใดๆก็ได้ที่อยู่ในระบบ password เป็น ' OR '1'='1 จะทำให้สามารถล็อกอินเข้าระบบเป็นใครก็ได้ทันที เนื่องจาก SQL String มีค่าเป็น SELECT * FROM db_user WHERE username='[ชื่อผู้ใช้]' AND password= '' OR '1'='1'; เท่ากับว่าเงื่อนไขนี้เป็นจริงเสมอ
ในกรณีเลวร้ายสุดคือ ลบข้อมูลในตารางทิ้งซะเลย โดยการกรอกค่า username เป็น ' OR '1'='1 password เป็น ' OR '1'='1' ; DELETE FROM db_user WHERE '1'='1 ทำให้ SQL String มีค่าเป็น SELECT * FROM db_user WHERE username='' OR '1'='1' AND password= '' OR '1'='1' ; DELETE FROM db_user WHERE '1'='1' ;
ส่วนวิธีการแก้ไขปัญหาตรงจุดนี้ของ PHP แนะนำให้ใช้ Prepare Statement เข้ามาคลุม แล้วส่งค่าผ่านฟังก์ชั่น bindParam แทนที่การแทรกลงใน String ตรงๆ จากตัวอย่างดังกล่าวโค้ดจะมีหน้าตาประมาณนี้ครับ
ส่วนภาษาอื่นก็มีเช่นกัน สามารถค้นหาจากกูเกิ้ลโดยพิมพ์ในช่องค้นหาเป็น "[ภาษา] Prepare Statement"
เขียนโดย Akkapon Somjai ที่ 07:39 //xsodusdev.blogspot.com/2015/06/sql-injection.html
Create Date : 04 มิถุนายน 2558 |
Last Update : 4 มิถุนายน 2558 19:07:38 น. |
|
0 comments
|
Counter : 930 Pageviews. |
|
|
|
| |
|
|