Latest web development tutorials

MySQL และ SQL ฉีด

ถ้าคุณได้รับข้อมูลที่ป้อนโดยผู้ใช้ผ่านทางเว็บและใส่ลงในฐานข้อมูล MySQL แล้วมันเป็นไปได้ SQL ปัญหาด้านความปลอดภัยในการฉีด

ส่วนนี้จะบอกวิธีการป้องกันการฉีด SQL และการกรองตัวอักษรฉีด SQL ในสคริปต์

ที่เรียกว่าฉีด SQL คือผ่านคำสั่ง SQL ในรูปแบบเว็บหรือส่งป้อนชื่อโดเมนหรือการร้องขอหน้าสตริงแบบสอบถามและในที่สุดหลอกลวงเซิร์ฟเวอร์เพื่อรันคำสั่ง SQL ที่เป็นอันตราย

เราไม่เคยเข้าของผู้ใช้ความไว้วางใจเราจะต้องระบุข้อมูลที่ป้อนโดยผู้ใช้ที่ไม่ปลอดภัยเราทุกคนต้องป้อนข้อมูลสำหรับผู้ใช้ขั้นตอนการกรองข้อมูล

ตัวอย่างต่อไปนี้ชื่อผู้ใช้ป้อนจะต้องมีการรวมกันของตัวอักษรตัวเลขและขีดและระยะเวลาในชื่อผู้ใช้อยู่ระหว่าง 8-20 ตัวอักษร:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysql_query("SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

ลองดูที่สถานการณ์เมื่อไม่มีตัวกรอง SQL อักขระพิเศษปรากฏขึ้น:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
mysql_query("SELECT * FROM users WHERE name='{$name}'");

ดังกล่าวข้างต้นคำสั่งฉีดเราไม่ได้มีการกรองชื่อตัวแปร $, $ ชื่อเราไม่ต้องใส่คำสั่ง SQL จะลบข้อมูลทั้งหมดในตารางผู้ใช้

mysql_query ใน PHP () ไม่ได้รับอนุญาตให้รันคำสั่งหลาย แต่ใน SQLite และ PostgreSQL สามารถรันคำสั่งหลายคนพร้อมกันเพื่อให้ผู้ใช้ข้อมูลเหล่านี้เราต้องตรวจสอบอย่างเข้มงวด

ป้องกันการฉีด SQL เราต้องให้ความสนใจไปยังจุดต่อไปนี้:

  • 1. ผู้ใช้ป้อนไม่เคยไว้วางใจ การตรวจสอบของผู้ใช้ป้อนคุณสามารถใช้การแสดงออกปกติหรือ จำกัด ความยาว; เดี่ยวและคู่เครื่องหมายคำพูด "-" ในการแปลง
  • 2. ห้ามใช้ SQL ชุมนุมแบบไดนามิกคุณสามารถใช้พารามิเตอร์ของใช้โดยตรงของ SQL หรือวิธีการเก็บแบบสอบถามสำหรับการเข้าถึงข้อมูล
  • 3. ห้ามใช้ผู้ดูแลระบบเชื่อมต่อฐานข้อมูลสิทธิพิเศษในการใช้สิทธิ์ของแต่ละบุคคลที่ จำกัด สำหรับแต่ละการเชื่อมต่อฐานข้อมูลแอพลิเคชัน
  • 4. อย่าเก็บข้อมูลลับโดยตรง, การเข้ารหัสหรือสับรหัสผ่านและข้อมูลที่สำคัญ
  • 5. ข้อมูลข้อยกเว้นการประยุกต์ใช้ควรจะได้รับไม่กี่แจ้งให้ที่ดีที่สุดคือการใช้ข้อความบรรจุภัณฑ์เดิมข้อผิดพลาดเกิดข้อผิดพลาดที่กำหนดเอง
  • การตรวจสอบบริเวณที่ฉีด 6.sql ในแพลตฟอร์มซอฟต์แวร์ทั่วไปหรือสนับสนุนในการตรวจสอบซอฟแวร์ที่ใช้กันทั่วไป SQL เครื่องมือตรวจจับการฉีด jsky เว็บไซต์เว็บไซต์อินเทอร์เน็ตพันล้านความคิดมีเครื่องมือตรวจจับแพลตฟอร์มการรักษาความปลอดภัย MDCSOFT SCAN ชอบ ใช้ MDCSOFT-IPS จะมีประสิทธิภาพการป้องกันการฉีด SQL, โจมตี XSS

การป้องกัน SQL injection

ในภาษาสคริปต์เช่น Perl และ PHP คุณสามารถหลบหนีข้อมูลที่ป้อนโดยผู้ใช้เพื่อป้องกันการฉีด SQL

ขยาย PHP MySQL ให้ mysql_real_escape_string () ฟังก์ชันที่จะหลบหนีป้อนอักขระพิเศษ

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysql_real_escape_string($name);
mysql_query("SELECT * FROM users WHERE name='{$name}'");

เช่นเดียวกับการฉีดงบ

เช่นแบบสอบถามหากผู้ใช้ป้อนค่าของ "_" และ "%", แล้วนี้เกิดขึ้น: ผู้ใช้ก็แค่พยายามแบบสอบถาม "abcd_" ผลการค้นหามี "ABCD _", "ABCDE", "abcdf" ฯลฯ ผู้ใช้สามารถสอบถาม "30%" (หมายเหตุ: ร้อยละสามสิบ) จะมีปัญหา

ในสคริปต์ PHP, เราสามารถใช้ addcslashes () ฟังก์ชันที่จะจัดการกับกรณีข้างต้นตัวอย่างต่อไปนี้:

$sub = addcslashes(mysql_real_escape_string("%something_"), "%_");
// $sub == \%something\_
mysql_query("SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

addcslashes () ฟังก์ชันที่ระบุไว้ก่อนด้วยเครื่องหมาย

ไวยากรณ์:

addcslashes(string,characters)
พารามิเตอร์ ลักษณะ
เชือก จำเป็นต้องใช้ หากต้องการตรวจสอบสตริงที่ระบุ
ตัวละคร ไม่จำเป็น กำหนดโดย addcslashes () ส่งผลกระทบต่อตัวละครหรือช่วงตัวอักษร

คุณสามารถดูโปรแกรมเฉพาะ: addcslashes PHP () ฟังก์ชัน