توابع 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); ?>