addslash กับ sql injection

เริ่มโดย nokia201, 12 กันยายน 2013, 01:47:46

หัวข้อก่อนหน้า - หัวข้อถัดไป

0 สมาชิก และ 1 ผู้มาเยือน กำลังดูหัวข้อนี้

MapTwoZa

อ้างถึงจาก: ossytong ใน 13 กันยายน 2013, 00:14:45
addslashes()

สามารถป้องกันได้ครับ

แต่การมีผลต่อ SQL INJECTION มันจะไม่สามารถสรุปได้ตรงๆหรอกครับ ว่าเราจะใช้อะไรกันได้ หรือไม่ได้ มันอยู่ที่ เคส SQL Cmd จริงๆครับ

แต่ addslashes() เป็น 1 ในทางเลือกการป้องกัน SQL INJECTION ที่ได้ผล ครับ

addslashes() ก็มีเคสที่โดน sql injection ได้
mysql_real_escape_string() ก็มีเคสที่ยังโดน sql injection ได้
mysql_real_escape_string php ปรับเป็น deprecated ตั้งแต่ 5.3 แล้ว current stable ปัจจุบันก็เอาออกไปแล้ว ไม่สามารถใช้งานได้อีก

prepare statement >> กันได้ 100%
prepare statement >> รับมายังไงก็ใส่ไปได้เลยไม่เสียเวลานั่ง real escape + addslash
prepare statement >> อ่าน query ได้ง่ายกว่าเยอะมากๆ

เค้าใช้ prepare statement กันหมดทั้งโลกแล้วครับ
framework ที่ทำฝั่ง model มาให้ ก็ใช้กันหมด
ทุก ORM framework เค้าก็ใช้ prepare statement กันหมด

ผมยังไม่เห็นว่า การที่ต้องไปนั่ง addslashes() ทุกครั้งที่รับ parameter มา มันน่าใช้กว่าตรงไหนเลยครับ ทำให้รำคาญซะอีก
Good code quality Developer :D

dekmv

เป็นประโยชน์มากครับ ขอบคุณมากครับ  :wanwan002:

taokae

#22
แต่ก่อนตอนเด็กๆ ผมทำแบบนี้เลยครับ

foreach($_POST as $key => $value) $_POST[$key] = mysql_real_escape_string($value)

โตมาอ่าน code ตัวเองแล้วขำ   :wanwan004:

ฉันไม่มีตัวตน

#23
อ้างถึงจาก: taokae ใน 13 กันยายน 2013, 01:20:44
แต่ก่อนตอนเด็กๆ ผมทำแบบนี้เลยครับ

foreach($_POST as $key => $value) $_POST[$key] = mysql_real_escape_string($value)

โตมาอ่าน code ตัวเองแล้วขำ   :wanwan004:

อธิบายเพิ่มที ผมเขียนแบบนี้ล่ะ อยากรู้ว่าต้องเขียนแบบไหนจึงถูกต้องครับ :P
สคริปผมต้องแก้ตรึมเลย :wanwan004: เมื่อวานก็เพิ่งเปลี่ยน mysql_fetch_array เป็น mysql_fetch_assoc

ปล.คิดถูกจริงๆที่เข้ามาอ่านกระทู้นี้ :wanwan017:

เอาข้อมูลมาเพิ่มครับ
http://net.tutsplus.com/tutorials/php/pdo-vs-mysqli-which-should-you-use/

http://www.php.net/manual/en/mysqli.real-escape-string.php
http://www.php.net/manual/en/ref.pdo-mysql.php
http://www.php.net/manual/en/book.mysqli.php
http://www.php.net/manual/en/ref.pdo-mysql.php

http://www.thaicreate.com/community/php-mysql-to-mysqil.html
http://www.thaicreate.com/community/basic-mysqli-reference.html
http://www.alcaros.com/blog/index.php?topic=9

dekmv

สรุปว่า

อ้างถึง1. การป้องกัน sql injection แบบเก่าๆ เลิกใช้ได้แล้วพวก mysql_real_escape_string
php เค้าเอาออกแล้วครับ (current stable version ปัจจุบันอยู่ที่ 5.5)

2. ไปใช้ MYSQL PDO/ MYSQLi prepare statement แล้ว bind parameter เอา
(ไม่ต้องนั่งกังวลอีกต่อไป รับมายังไงก็ bind ไปอย่างนั้น จบ)

อย่างโดยเร็ว ต้อนรับ PHP 5.5  :wanwan044:

siammbk

จริงๆ ถ้ามอง injection จาก url ออก

แค่ดักจาก get url มันก็น่าจะจบแล้วคับ

ส่วนวิธีกรองก็มีหลายวิธีคับ
รับออกแบบเว็บไซต์ ทุกรูปแบบ งานใหญ่ๆ ระบบยากๆ ราคาแรงๆ คุยกันคับ
line : siammbk
tel : 095-675-8614

MASTER-X

เลิกกลัว sql i มาตั้งนานแล้ว ...

กลัวอย่างอื่นมากกว่า
*** รับทำเว็บไซต์ ***
*** รับทำแอพ ios / android ***

siammbk

ผมสิโดนมากับตัวเอง injection เข้ามาลบ member ลบนั่นลบนี่

จนต้องมานั่งดูว่าเข้ามาจากอะไร เซงมากตอนข้อมูลหาย

ผมเลยยอมเสียเวลามานั่งดู พอคิด logic กันขึ้นมาได้ มันก็ทำอะไรผมไม่ได้ละ สบายใจ  :P
รับออกแบบเว็บไซต์ ทุกรูปแบบ งานใหญ่ๆ ระบบยากๆ ราคาแรงๆ คุยกันคับ
line : siammbk
tel : 095-675-8614

dekmv

อ้างถึงจาก: siammbk ใน 15 กันยายน 2013, 22:24:44
ผมสิโดนมากับตัวเอง injection เข้ามาลบ member ลบนั่นลบนี่

จนต้องมานั่งดูว่าเข้ามาจากอะไร เซงมากตอนข้อมูลหาย

ผมเลยยอมเสียเวลามานั่งดู พอคิด logic กันขึ้นมาได้ มันก็ทำอะไรผมไม่ได้ละ สบายใจ  :P

โดนมาสดๆเลยนะครับ  :'(

Amdroid

อ้างถึงจาก: MASTER-X ใน 15 กันยายน 2013, 22:21:29
เลิกกลัว sql i มาตั้งนานแล้ว ...

กลัวอย่างอื่นมากกว่า
ก็กันเท่าที่กันได้อะครับ
Jelly Bean