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 () ฟังก์ชัน