توابع mysql_real_escape_string() PHP

تعریف و استفاده

توابع 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('نتوانست متصل شود: ' . 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('نتوانست متصل شود: ' . 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('نتوانست متصل شود: ' . 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);
?>