ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น

ThaiSEOBoard.comพัฒนาเว็บไซต์Programmingอยากรู้วิธีป้องกัน sql injection
หน้า: [1]   ลงล่าง
พิมพ์
ผู้เขียน หัวข้อ: อยากรู้วิธีป้องกัน sql injection  (อ่าน 3257 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
sutiwat
สมุนแก๊งเสียว
*

พลังน้ำใจ: 15
ออฟไลน์ ออฟไลน์

กระทู้: 503



ดูรายละเอียด
« เมื่อ: 13 ธันวาคม 2009, 22:50:07 »

อยากรู้วิธีป้องกัน sql injection ผมพัฒนาแล้วมันมีบัก นี้อะครับอย่างรู้ว่าจะมีวิธีป้องกันยังไง wanwan014
บันทึกการเข้า

iah(carus)
Verified Seller
ก๊วนเสียว
*

พลังน้ำใจ: 113
ออฟไลน์ ออฟไลน์

กระทู้: 327



ดูรายละเอียด
« ตอบ #1 เมื่อ: 13 ธันวาคม 2009, 23:33:09 »

ทำความสะอาดตัวแปรที่่รับมาจากผู้ใช้ก่อนครับ
เ่ช่น เปลี่ยน ' (single quotes) ให้เป็น \'

เมื่อ code sql ที่จะ run สะอาดแล้วก็จะปลอดภัยครับ
บันทึกการเข้า

mixture
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 73
ออฟไลน์ ออฟไลน์

กระทู้: 1,844



ดูรายละเอียด เว็บไซต์
« ตอบ #2 เมื่อ: 13 ธันวาคม 2009, 23:34:40 »

ใช้ mysql_real_escape_string() กรองค่าที่รับจากฟอร์มก่อน แล้วค่อยนำไปใส่ในคิวรี่ครับ

http://www.tizag.com/mysqlTuto...al/mysql-php-sql-injection.php
บันทึกการเข้า

fernsterno
Verified Seller
หัวหน้าแก๊งเสียว
*

พลังน้ำใจ: 49
ออฟไลน์ ออฟไลน์

กระทู้: 1,519



ดูรายละเอียด เว็บไซต์
« ตอบ #3 เมื่อ: 13 ธันวาคม 2009, 23:49:18 »

ได้ความรู้ครับ กำลังอยู่ในสายนี้เลย
บันทึกการเข้า

ohmohm
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 170
ออฟไลน์ ออฟไลน์

กระทู้: 3,098



ดูรายละเอียด เว็บไซต์
« ตอบ #4 เมื่อ: 14 ธันวาคม 2009, 22:43:04 »

Be aware that "sanitizing the input" doesn't mean merely "remove the quotes"
http://unixwiz.net/techtips/sql-injection.html
บันทึกการเข้า
EThaiZone
เจ้าพ่อโลลิค่อน
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 321
ออฟไลน์ ออฟไลน์

กระทู้: 12,518



ดูรายละเอียด เว็บไซต์
« ตอบ #5 เมื่อ: 14 ธันวาคม 2009, 23:10:26 »

Be aware that "sanitizing the input" doesn't mean merely "remove the quotes"
http://unixwiz.net/techtips/sql-injection.html

ตามนั้นเลย ยกตัวอย่าง query เป็นแบบนี้

select * from student where name='bob'

ค่าที่จะถูกโยนแทนที่ bob ก็ควรต้องทำการกันเปลี่ยน ' ที่อาจมีให้กลายเป็น \'
สมมุติค่าจะโดนโยนไปเป็น parent's john ก็ต้องเปลี่ยนเป็น parent\'s john

ตรงนี้ต้องระวังกันด้วย สามารถใช้ str_replace ธรรมดา เพื่อจัดการตรงนี้ได้ครับ
บันทึกการเข้า

pomchai
สมุนแก๊งเสียว
*

พลังน้ำใจ: 21
ออฟไลน์ ออฟไลน์

กระทู้: 841



ดูรายละเอียด
« ตอบ #6 เมื่อ: 15 ธันวาคม 2009, 08:12:52 »

รับทราบครับ
บันทึกการเข้า
zoomman
ก๊วนเสียว
*

พลังน้ำใจ: 26
ออฟไลน์ ออฟไลน์

กระทู้: 246



ดูรายละเอียด
« ตอบ #7 เมื่อ: 15 ธันวาคม 2009, 08:19:30 »

เรื่องนี้สำคัญครับ
คุณต้องป้องกันเครื่องหมายพิเศษที่ส่งผลต่อ db โดยตรงครับ
เพราะแค่ ' หรือ " ก็สามารถเอา password admin คุณไปได้
บันทึกการเข้า

ลายเซ็น
ball6847
เจ้าพ่อบอร์ดเสียว
*

พลังน้ำใจ: 212
ออฟไลน์ ออฟไลน์

กระทู้: 4,174



ดูรายละเอียด
« ตอบ #8 เมื่อ: 15 ธันวาคม 2009, 10:02:40 »

ใช้ mysql_real_escape_string ตามที่พี่ mixture  บอกจะช่วยได้มากกว่าเรื่อง sql injection นะคับ เรื่องของเรื่องคือการ escape character ให้เข้ากับ encoding ของ database connection คับ แต่ว่าจะทำงานช้ากว่า addslashes อยู่หน่อยนึง

ผมเสริมจากที่พี่ mixture บอกหน่อยนึงคือไม่ใช่แค่การรับค่าจากฟอร์ม เพราะ user input นั้นนอกจาก GET หรือ POST แล้ว ยังมี COOKIE ซึ่งไม่ได้มากับฟอร์มด้วยคับ

อีกเรื่องคือถ้าข้อมูลเป็นตัวเลขแน่นอน ไม่จำเป็นต้องทำการ escape ใดๆเลยก็ได้ สามารถใช้ type casting ให้เป็นตัวเลขแล้วนำไปใช้ได้เลย เช่น

if (empty($_GET['user_id']) OR ! $user_id = (int) $_GET['user_id'])
{
     die(
'ค่า User ID ต้องมีค่ามากกว่า 0 ขึ้นไป');
}

$sql 'SELECT * FROM users WHERE user_id=' $user_id;

ปล แต่เอาเข้าจริงๆแล้ว ตัวผมเองผมไม่แคร์ว่าข้อมูลจะมาจากไหน ก่อนสร้าง query ผมยังงัยก็ใช้ mysql_real_escape_string กับค่าที่เป็น string ตลอดแหละ แถมถ้าใช้ Codeigniter ผมแทบไม่แคร์เรื่อง escape เลย เหอๆ
« แก้ไขครั้งสุดท้าย: 15 ธันวาคม 2009, 10:05:11 โดย ball6847 » บันทึกการเข้า

หน้า: [1]   ขึ้นบน
พิมพ์