ตัวอย่างฟังก์ชั่นต่อไปนี้ เป็นแนวทางอย่างง่าย สำหรับใช้ในการป้องกัน
SQL Injection สามารถนำไปใช้งานได้ตามต้องการ หรือปรับแต่ง ดัดแปลงเพิ่มเติม
php ฟังก์ชั่น
ให้สร้างไฟล์ชื่อ sql_injection.php ไว้สำหรับ include ไฟล์ที่ต้องการใช้งาน
การใช้งาน
ตัวอย่างการใช้งาน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 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 ]; } } } } |
การใช้งาน
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | 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
1 2 3 4 5 6 7 8 9 | <?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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <?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> |