สอบถามหลักสูตรเลือกช่องทางที่สะดวก ทีมงานตอบเองทุกช่อง
LINE @itgeniusตอบเร็วที่สุด · จ–ศ 9:00–17:00 น.
โทรศัพท์
02-570-8449สำนักงาน088-807-9770มือถือ
อีเมลและโซเชียล
contact@itgenius.co.thสำหรับใบเสนอราคาและเอกสารFacebookitgeniusonlineYouTubeitgeniusengขอคำปรึกษาจัดอบรมให้ทีม
ฐานข้อมูล

วิธีป้องกัน SQL Injection

1 เม.ย. 2558

บรรทัดที่ 2 หมายความว่า ทุกๆค่าที่ถูกส่งมาด้วยการ GET ให้ตัดช่องว่างด้านหน้าและด้านหลัง แล้วตัดเครื่องหมาย html ออก

วิธีป้องกัน SQL Injection

วิธีป้องกัน ผมใช้ code นี้ แปะไว้ส่วนบนของไฟล์ php ทุกไฟล์
 
# ป้องกัน sql injection จาก $_GET
foreach ($_GET as $key => $value) {
  $_GET[$key]=addslashes(strip_tags(trim($value)));
}

if ($_GET['id'] !='') { $_GET['id']=(int) $_GET['id']; }
extract($_GET);

บรรทัดที่ 2 หมายความว่า ทุกๆค่าที่ถูกส่งมาด้วยการ GET ให้ตัดช่องว่างด้านหน้าและด้านหลัง แล้วตัดเครื่องหมาย html ออก
คำสั่ง strip_tags นี้ช่วยให้ การแทรก code javascipt ทำงานผิดพลาด เช่นมีคนแทรก javascript มาว่า <script>alert('555');</script> คำสั่ง strip_tags จะทำเหลือแต่ข้อความ alert('555') ซึ่งทำงานไม่ได้ เพราะไม่ได้ระบุว่าเป็น javascript หลังจากนั้นก็ addslashes เข้าไปอีกชั้นนึง ถ้ามีคนส่งค่า 1'or'1=1 เข้ามา จะถูกแปลงเป็น 1'or'1=1 ทำให้คำสั่ง SQL ล้มเหลว ประมวลผลผิด

และตบท้ายด้วยการเช็คค่า id ถ้าไม่ใช่ช่องว่าง ให้แปลง id เป็น integer เท่านั้น และปิดด้วยคำสั่ง extract($_GET) เพื่อรับค่าจากการ GET ทั้งหมด

วิธีนี้ป้องกัน SQL Injection จากทุกหน้าที่รับค่าด้วยการ GET ส่วนหน้าไหนที่มี form submit รับค่าจากการ POST ก็ใช้หลักการเดียวกัน

ยังมีอีกส่วนที่เราต้องป้องกัน คือ การกรอก user, password ตัวแปรที่รับค่าจะต้อง addslashes เข้าไปด้วย เช่น

$username = addslashes(trim($_POST['user']));
$password= addslashes(trim($_POST['pwd']));
 
ถึงตรงนี้ เราคิดว่าเราป้องกันดีแล้วทั้งจาก GET และ POST แต่ยังมีอีกส่วนหนึ่ง สมมติเรามี webboard ที่อนุญาติให้คนทั่วไปอัพรูปเข้ามาได้ แล้วเรามีหน้า admin ซึ่งตั้งค่าได้ว่า จะอนุญาติให้อัพไฟล์ชนิดใดได้บ้าง แล้วแฮ็กเกอร์เก่งมาก เดา user, password ถูก เข้าสู่หน้า admin ของเราได้ แล้วไปแก้การอนุญาติอัพโหลดไฟล์ ให้อนุญาติไฟล์ .php ด้วย จากนั้นก็อัพไฟล์ .php ของแฮ็คเกอร์ขึ้นเว็บเรา หลังจากนั้น แฮ็กเกอร์ก็จะสามารถจัดการ อัพโหลด ดาวโหลด สั่งลบ ทุกไฟล์ในเว็บเราได้

การป้องกันอีกชั้นนึง คือ ต้องไม่อนุญาติให้อัพโหลดไฟล์ .php อย่างเด็ดขาด ผมใช้ code นี้ในการตรวจสอบการอัพโหลดไฟล์ผ่าน webboard

$filename=$_FILES[$namefile]['name'];
$u1=substr($filename, -3); $u1=strtolower($u1);
 
// รายชื่อชนิดไฟล์ที่อนุญาติ ที่บันทึกไว้ในฐานข้อมูล
$allowfile=' '.$setting["allow_file"];
 
// แม้ว่าในฐานข้อมูลจะอนุญาติไฟล์ .php แต่ในขั้นตอนอัพโหลด เราจะยกเลิกไฟล์ php
$u3='php,htm,.pl,cgi,js,asp,swf,com,bat,cmd';
 
$t1=explode(',', $u3); $len=count($t1);
 
for ($i=0; $i<$len; $i++) {
 
$allowfile=str_replace($t1[$i], '', $allowfile);
 
}
if (strpos($allowfile, $u1) == 0 ) alertBack("ไม่อนุญาติให้อัพโหลดไฟล์ชนิดนี้");
 

 

 

ที่มา :

บริการของเรา

ไอทีจีเนียส เอ็นจิเนียริ่ง ให้บริการด้านไอทีครบวงจร

ทั้งงานอบรม (Training) สัมมนา รับเขียนโปรแกรม เว็บไซต์ แอปพลิเคชัน งานออกแบบกราฟิก และงานด้าน E-Marketing ทั้ง SEO, PPC และ Social Media Marketing

ติดต่อเราเพื่อสอบถามผลิตภัณฑ์ ขอราคา หรือปรึกษาเรื่องไอทีได้เลยค่ะ

แนะนำหลักสูตรที่น่าสนใจ

Data Agents and Text-to-SQL
ฐานข้อมูล

Data Agents and Text-to-SQL

หลายองค์กรอยากให้พนักงานถามข้อมูลในฐานข้อมูลเป็นภาษาคนได้เอง โดยไม่ต้องรอทีม Data เขียน SQL ให้ทุกครั้ง LLM ยุคนี้เขียน SQL ได้เก่งขึ้นมาก แต่เมื่อต่อเข้ากับฐานข้อมูลจริงกลับเจอปัญหาเดิมซ้ำ ๆ ทั้งเลือกตารางผิด นิยามยอดขายไม่ตรงกับที่ฝ่ายบัญชีใช้…

12 ชั่วโมง 2 วัน
6,210บาท 6,900 บาท
SQL for Data Analytics with BigQuery
ฐานข้อมูล

SQL for Data Analytics with BigQuery

ข้อมูลยอดขาย ลูกค้า และพฤติกรรมการใช้งานขององค์กรจำนวนมากถูกเก็บไว้ในคลังข้อมูลบนคลาวด์อย่าง Google BigQuery แต่คนที่ต้องใช้ตัวเลขเหล่านี้ตัดสินใจกลับต้องรอให้ทีมข้อมูลดึงให้ทุกครั้ง หรือดาวน์โหลดมาทำใน Excel จนเครื่องค้าง ทักษะ SQL…

12 ชั่วโมง 2 วัน
6,210บาท 6,900 บาท