يحصل على متغير هو الهرب؟
-
29-09-2019 - |
سؤال
أنا مرتبك حقًا هنا ، هل يمكن لأحد أن يشرح هذا لي؟
طلب:http://example.com/test.php?var=String's
$a = $_GET["var"];
$b = "String's";
echo $a . "<br/>";
echo $b . "<br/>";
$output = mysql_real_escape_string($a);
$output = mysql_real_escape_string($b);
echo "<hr/>";
echo $a . "<br/>";
echo $b . "<br/>";
نتيجة:
String\'s
String's
----------------
String\'s
String's
هل يمكن لشخص ما أن يشرح لي ليس فقط لماذا يتم تحويل متغيرتي على هذا النحو ، ولكن كيف يمكنني إزالة هذا السلوك بحيث يتم إرسال مدخلاتي تمامًا عند إرسالها؟ أواجه مشكلة حيث يمرر غلاف SQL الخاص بي هذا من خلال mysql_real_escape_string () وينتهي به الأمر String\\\'s
:(
المحلول
تسمى "اقتباسات سحرية".
نصائح أخرى
تستطيع وينبغي تعطيل الاقتباسات السحرية.
الوضع المفضل
أخرجهم في php.ini
.htaccess وضع
أضف هذا إلى ملف htaccess الخاص بك
php_flag magic_quotes_gpc off
وضع وقت التشغيل PHP5
<?php
if (get_magic_quotes_gpc()) {
function stripslashes_gpc(&$value)
{
$value = stripslashes($value);
}
array_walk_recursive($_GET, 'stripslashes_gpc');
array_walk_recursive($_POST, 'stripslashes_gpc');
array_walk_recursive($_COOKIE, 'stripslashes_gpc');
array_walk_recursive($_REQUEST, 'stripslashes_gpc');
}
?>
وضع وقت التشغيل PHP4
<?php
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
?>
أهلا بك في magic_quotes
نادي Hater's! قون
ربما يكون لديك اقتباسات سحرية تم تشغيلها. هذا يهرب تلقائيا الحصول على بيانات ، نشر وملف تعريف الارتباط. اقتباسات السحرية سيئة ولا ينبغي الاعتماد عليها للهروب من البيانات بشكل صحيح.
إذا كان لديك وصول إلى php.ini ، يمكنك اقتبس أسعار السحر.
إذا لم تقم بذلك ، يمكنك الجري شرائح الشرق على البيانات لإزالة القطع. لجعل الكود المحمول الخاص بك ، يجب عليك أولاً التحقق get_magic_quotes_gpc()
لمعرفة ما إذا كان قد تم تشغيله وعندما تشغيل stripslashes فقط. وبهذه الطريقة ، إذا قمت بنقل التعليمات البرمجية الخاصة بك إلى خادم يحتوي على أسعار سحرية ، فسيظل الرمز الخاص بك يعمل.
if(get_magic_quotes_gpc()) {
$a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];