ป้องกัน SQL Injection ด้วย php ฟังก์ชั่นอย่างง่าย ตอนที่ 1
เขียนเมื่อ 7 ปีก่อน โดย Ninenik Narkdeesql injection
คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ sql injection
คำเตือน! เนื้อหาต่อไปนี้ เป็นเนื้อหาเก่า อาจจะไม่เหมาะสำหรับนำไปใช้งาน
หรือไม่สามารถใช้งานได้แล้ว
ไปที่ Copy
ตัวอย่างฟังก์ชั่นต่อไปนี้ เป็นแนวทางอย่างง่าย สำหรับใช้ในการป้องกัน
SQL Injection สามารถนำไปใช้งานได้ตามต้องการ หรือปรับแต่ง ดัดแปลงเพิ่มเติม
php ฟังก์ชั่น
ให้สร้างไฟล์ชื่อ sql_injection.php ไว้สำหรับ include ไฟล์ที่ต้องการใช้งาน
การใช้งาน
ตัวอย่างการใช้งาน
function real_esc($array,$int=0){ if(count($array)>0){ if(is_array($array)){ foreach($array as $key=>$value){ if(@is_array($array[$key])){ foreach($array[$key] as $key_2=>$value_2){ if($_SERVER['REQUEST_METHOD']=='GET'){ if(get_magic_quotes_gpc()){ $_GET[$key][$key_2]=trim("$value_2"); }else{ $_GET[$key][$key_2]=@mysql_real_escape_string(trim("$value_2")); } $_GET[$key][$key_2]=($int==1)?(int)$_GET[$key][$key_2]:$_GET[$key][$key_2]; }else{ if(get_magic_quotes_gpc()){ $_POST[$key][$key_2]=trim("$value_2"); }else{ $_POST[$key][$key_2]=@mysql_real_escape_string(trim("$value_2")); } $_POST[$key][$key_2]=($int==1)?(int)$_POST[$key][$key_2]:$_POST[$key][$key_2]; } } }else{ if($_SERVER['REQUEST_METHOD']=='GET'){ if(get_magic_quotes_gpc()){ $_GET[$key]=trim("$value"); }else{ $_GET[$key]=@mysql_real_escape_string(trim("$value")); } $_GET[$key]=($int==1)?(int)$_GET[$key]:$_GET[$key]; }else{ if(get_magic_quotes_gpc()){ $_POST[$key]=trim("$value"); }else{ $_POST[$key]=@mysql_real_escape_string(trim("$value")); } $_POST[$key]=($int==1)?(int)$_POST[$key]:$_POST[$key]; } } } }else{ $value=$array; if($_SERVER['REQUEST_METHOD']=='GET'){ $getVars = array_keys($_GET); $key=$getVars[0]; if(get_magic_quotes_gpc()){ $_GET[$key]=trim("$value"); }else{ $_GET[$key]=@mysql_real_escape_string(trim("$value")); } $_GET[$key]=($int==1)?(int)$_GET[$key]:$_GET[$key]; }else{ $getVars = array_keys($_POST); $key=$getVars[0]; if(get_magic_quotes_gpc()){ $_POST[$key]=trim("$value"); }else{ $_POST[$key]=@mysql_real_escape_string(trim("$value")); } $_POST[$key]=($int==1)?(int)$_POST[$key]:$_POST[$key]; } } } }
การใช้งาน
real_esc($_POST); // จัดการรายการที่ส่งแบบ POST ทั้งหมด ก่อนนำไปใช้งานในคำสั่ง sql real_esc($_POST,1); // จัดการรายการที่ส่งแบบ POST ทั้งหมด ก่อนนำไปใช้งานในคำสั่ง sql // และแปลงให้เป็นตัวเลขเท่านั้น ใช้สำหรับกรณีเราส่งค่า id ที่เป็นตัวเลขทั้งหมด real_esc($_POST['member_id']); // จัดการรายการที่ส่งแบบ POST รายตัวแปร ก่อนนำไปใช้งานในคำสั่ง sql real_esc($_POST['member_id'],1); // จัดการรายการที่ส่งแบบ POST รายตัวแปร ก่อนนำไปใช้งานในคำสั่ง sql // และแปลงให้เป็นตัวเลขเท่านั้น ใช้สำหรับกรณีเราส่งค่า id ที่เป็นตัวเลข real_esc($_GET); // จัดการรายการที่ส่งแบบ GET ทั้งหมด ก่อนนำไปใช้งานในคำสั่ง sql real_esc($_GET,1); // จัดการรายการที่ส่งแบบ GET ทั้งหมด ก่อนนำไปใช้งานในคำสั่ง sql // และแปลงให้เป็นตัวเลขเท่านั้น ใช้สำหรับกรณีเราส่งค่า id ที่เป็นตัวเลขทั้งหมด real_esc($_GET['member_id']); // จัดการรายการที่ส่งแบบ GET รายตัวแปร ก่อนนำไปใช้งานในคำสั่ง sql real_esc($_GET['member_id'],1); // จัดการรายการที่ส่งแบบ GET รายตัวแปร ก่อนนำไปใช้งานในคำสั่ง sql // และแปลงให้เป็นตัวเลขเท่านั้น ใช้สำหรับกรณีเราส่งค่า id ที่เป็นตัวเลข
ตัวอย่างการใช้งาน
ไฟล์ view_data.php แสดงรายละเอียดข้อมูล รับค่า GET ตัวแปร id
แล้วนำไปใช้งานในคำสั่ง sql เพื่อแสดงข้อมูลจากฐานข้อมูล
เช่น wwww.ninenik.com/view_data.php?id=1
สมมติไฟล์เชื่อมต่อฐานข้อมูลเราชื่อ connect.php
ไฟล์ view_data.php
<?php header("Content-type:text/html; charset=UTF-8"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); // เชื่อมต่อกับฐานข้อมูล $link=mysql_connect("localhost","root","test"); // เชื่อมต่อ Server mysql_select_db("test"); // ติดต่อฐานข้อมูล mysql_query("set character set utf8"); // กำหนดค่า character set ที่จะใช้แสดงผล ?>
ไฟล์ view_data.php
<?php // เชื่อมต่อกับฐานข้อมูล include("connect.php"); // เรียกไฟล์ ฟังก์ชั่น sql injection ที่เราสร้างมาใช้งาน include("sql_injection.php"); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <?php real_esc($_GET,1); //real_esc($_GET['id'],1); // หรือใช้แบบนี้ก็ได้ กำหนด 1 เมื่อค่าต้องการเป็นตัวเลข $q=" SELECT * FROM tbl_data WHERE data_id='".$_GET['id']."' LIMIT 1 "; $qr=mysql_query($q); $rs=mysql_fetch_array($qr); echo $rs['data_detail']."<br>"; ?> </body> </html>
กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ

Tags::
sql injection
เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก
กรุณาล็อกอิน เพื่ออ่านเนื้อหาบทความ
ยังไม่เป็นสมาชิก
สมาชิกล็อกอิน
สมาชิกล็อกอิน
( หรือ เข้าใช้งานผ่าน Social Login )
URL สำหรับอ้างอิง
Top
Copy
ขอบคุณทุกการสนับสนุน
![]()