หัวข้อ: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: sutiwat ที่ 13 ธันวาคม 2009, 22:50:07 อยากรู้วิธีป้องกัน sql injection ผมพัฒนาแล้วมันมีบัก นี้อะครับอย่างรู้ว่าจะมีวิธีป้องกันยังไง :wanwan014:
หัวข้อ: Re: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: iah(carus) ที่ 13 ธันวาคม 2009, 23:33:09 ทำความสะอาดตัวแปรที่่รับมาจากผู้ใช้ก่อนครับ
เ่ช่น เปลี่ยน ' (single quotes) ให้เป็น \' เมื่อ code sql ที่จะ run สะอาดแล้วก็จะปลอดภัยครับ หัวข้อ: Re: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: mixture ที่ 13 ธันวาคม 2009, 23:34:40 ใช้ mysql_real_escape_string() กรองค่าที่รับจากฟอร์มก่อน แล้วค่อยนำไปใส่ในคิวรี่ครับ
http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php หัวข้อ: Re: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: fernsterno ที่ 13 ธันวาคม 2009, 23:49:18 ได้ความรู้ครับ กำลังอยู่ในสายนี้เลย
หัวข้อ: Re: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: ohmohm ที่ 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 หัวข้อ: Re: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: EThaiZone ที่ 14 ธันวาคม 2009, 23:10:26 Be aware that "sanitizing the input" doesn't mean merely "remove the quotes" [url]http://unixwiz.net/techtips/sql-injection.html[/url] ตามนั้นเลย ยกตัวอย่าง query เป็นแบบนี้ select * from student where name='bob' ค่าที่จะถูกโยนแทนที่ bob ก็ควรต้องทำการกันเปลี่ยน ' ที่อาจมีให้กลายเป็น \' สมมุติค่าจะโดนโยนไปเป็น parent's john ก็ต้องเปลี่ยนเป็น parent\'s john ตรงนี้ต้องระวังกันด้วย สามารถใช้ str_replace ธรรมดา เพื่อจัดการตรงนี้ได้ครับ หัวข้อ: Re: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: pomchai ที่ 15 ธันวาคม 2009, 08:12:52 รับทราบครับ
หัวข้อ: Re: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: zoomman ที่ 15 ธันวาคม 2009, 08:19:30 เรื่องนี้สำคัญครับ
คุณต้องป้องกันเครื่องหมายพิเศษที่ส่งผลต่อ db โดยตรงครับ เพราะแค่ ' หรือ " ก็สามารถเอา password admin คุณไปได้ หัวข้อ: Re: อยากรู้วิธีป้องกัน sql injection เริ่มหัวข้อโดย: ball6847 ที่ 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 เลย เหอๆ |