ฟังก์ชัน PHP mysql_real_escape_string()
การใช้งานและการประกาศ
ฟังก์ชัน mysql_real_escape_string() จะปลดรหัสตัวอักษรพิเศษในตัวแปรที่ใช้ในคำสั่ง SQL。
ตัวอักษรดังนี้น่าจะได้รับผลกระทบ:
- \x00
- \n
- \r
- \
- '
- "
- \x1a
ถ้าสำเร็จ ฟังก์ชันนี้จะกลับค่าตัวแปรที่ปลดรหัส ถ้าล้มเหลว จะกลับค่า false。
ศัพท์ประกาศ
mysql_real_escape_string(string,connection)
ตัวแปร | คำอธิบาย |
---|---|
string | จำเป็น. กำหนดตัวแปรที่ต้องการทำการปลดรหัส |
connection | เลือกตั้ง. กำหนดการเชื่อมต่อ MySQL หากไม่กำหนด จะใช้การเชื่อมต่อที่ผ่านมา |
คำอธิบาย
ฟังก์ชันนี้จะ string ตัวอักษรพิเศษที่ต้องทำการปลดรหัส และให้ความรู้สึกถึงตัวอักษรตัวย่อยของตัวแปรติดต่อปัจจุบัน ดังนั้นจึงสามารถใช้ได้อย่างปลอดภัยเพื่อ mysql_query().
คำเตือนและหมายเหตุ
คำเตือน:สามารถใช้ฟังก์ชันนี้เพื่อป้องกันการโจมตีฐานข้อมูล.
ตัวอย่าง
ตัวอย่าง 1
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // โค้ดที่ใช้ในการขอรับชื่อผู้ใช้และรหัสผ่าน // ปลดรหัสนามผู้ใช้และรหัสผ่านเพื่อใช้ใน SQL $user = mysql_real_escape_string($user); $pwd = mysql_real_escape_string($pwd); $sql = "SELECT * FROM users WHERE user='" . $user . "' AND password='" . $pwd . "'" // มากกว่านี้เพิ่มเติม mysql_close($con); ?>
ตัวอย่าง 2
การโจมตีฐานข้อมูลฐานแรงงาน. ตัวอย่างนี้แสดงว่าถ้าเราไม่นำคำสั่ง mysql_real_escape_string() ใช้กับชื่อผู้ใช้และรหัสผ่านอะไรจะเกิดขึ้น:
<?php $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } $sql = "SELECT * FROM users WHERE user='{$_POST['user']} AND password='{$_POST['pwd']}'"; mysql_query($sql); // ไม่ตรวจสอบชื่อผู้ใช้และรหัสผ่าน // สามารถเป็นข้อความที่ผู้ใช้กรอกเข้ามาได้ ตัวอย่างเช่น: $_POST['user'] = 'john'; $_POST['pwd'] = "' OR ''='"; // บางส่วนของโค้ด... mysql_close($con); ?>
แล้วคำสั่งค้นหา SQL จะเป็นแบบนี้:
SELECT * FROM users WHERE user='john' AND password='' OR ''=''
นี่หมายความว่าใครก็ตามไม่จำเป็นต้องใส่รหัสผ่านที่ถูกต้องเพื่อเข้าสู่ระบบ
ตัวอย่าง 3
ทางเลือกที่ถูกต้องสำหรับป้องกันการโจมตีฐานข้อมูล
<?php function check_input($value) { // ลบสลัสย์เอส if (get_magic_quotes_gpc()) { $value = stripslashes($value); } // ถ้าไม่ใช่ตัวเลข ให้เพิ่มเครื่องหมายเรียก if (!is_numeric($value)) { $value = "'" . mysql_real_escape_string($value) . "'"; } return $value; } $con = mysql_connect("localhost", "hello", "321"); if (!$con) { die('Could not connect: ' . mysql_error()); } // การดำเนินการ SQL ที่ปลอดภัย $user = check_input($_POST['user']); $pwd = check_input($_POST['pwd']); $sql = "SELECT * FROM users WHERE user=$user AND password=$pwd"; mysql_query($sql); mysql_close($con); ?>