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