ป้องกัน SQL Injection สำหรับการ ล็อกอิน อย่างง่าย ตอนที่ 2
เขียนเมื่อ 8 ปีก่อน โดย Ninenik Narkdeesql injection
คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ sql injection
คำเตือน! เนื้อหาต่อไปนี้ เป็นเนื้อหาเก่า อาจจะไม่เหมาะสำหรับนำไปใช้งาน
หรือไม่สามารถใช้งานได้แล้ว
ไปที่ Copy
ต่อเนื่อง และเพิ่มเติมจากเนื้อหาบทความก่อนหน้า
ป้องกัน SQL Injection ด้วย php ฟังก์ชั่นอย่างง่าย ตอนที่ 1
http://www.ninenik.com/content.php?arti_id=602 via @ninenik
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 ที่เป็นตัวเลข
ตัวอย่างการใช้งาน
กรณีสมมติเราไฟล์สำหรับเป็นฟอร์มล็อกอิน อย่างง่าย ชื่อ login.php
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Test Login</title> </head> <body> <br> <form id="myform1" name="myform1" method="post" action="check_login.php"> Username:<br> <input type="text" name="username" id="username"><br> Password<br> <input type="password" name="password" id="password"><br> <br> <input type="submit" value="Login" name="login" value="Log In"> </form> </body> </html>
ส่งค่าไปตรวจสอบที่ไฟล์ check_login.php
สมมติไฟล์เชื่อมต่อฐานข้อมูลเราชื่อ connect.php
<?php session_start(); // สำหรับใช้งานตัวแปร SESSION 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 ที่จะใช้แสดงผล ?>
ไฟล์ check_login.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 if(isset($_POST['login']) && $_POST['login']!=""){ real_esc($_POST); $q=" SELECT * FROM tbl_member WHERE member_name='".$_POST['username']."' AND member_password='".$_POST['password']."' AND member_type='1' LIMIT 1 "; $qr=mysql_query($q); if($qr && mysql_num_rows($qr)>0){ $rs=mysql_fetch_array($qr); echo $rs['member_name']."<br>"; $_SESSION['ses_member_id']=$rs['member_id']; echo "Ok"; }else{ echo "No"; } } ?> </body> </html>
กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ

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