mein GET-Variable entkam wird?
-
29-09-2019 - |
Frage
Ich bin hier wirklich verwirrt, kann jemand mir dies erklären?
Anfrage:
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/>";
Ergebnis:
String\'s
String's
----------------
String\'s
String's
Könnte mir jemand erklären, nicht nur, warum mein GET-Variable wird wie folgt transformiert wird, aber wie ich dieses Verhalten entfernen kann, so dass meine Eingabe genau, wie sie gesendet wurde? Ich habe ein Problem, wo mein SQL-Wrapper dies geht durch mysql_real_escape_string () und endet als String\\\'s
: (
Lösung
Es heißt "magic quotes" .
Andere Tipps
Sie können und sollte deaktivieren magic quotes.
Beliebten Modus
setzt sie in php.ini
.htaccess-Modus
fügen Sie diese zu Ihrer .htaccess-Datei
php_flag magic_quotes_gpc off
php5 Runtime-Modus
<?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 Runtime-Modus
<?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);
}
?>
Willkommen in der Club-magic_quotes
Hasser! :)
Sie haben wahrscheinlich magic quotes eingeschaltet. Dieser entweicht automatisch GET, POST und COOKIE-Daten. Magic Quotes ist schlecht und sollte sich nicht darauf verlassen, um richtig Daten zu entkommen.
Wenn Sie den Zugriff auf die Datei php.ini haben, können Sie wiederum Magie Zitate aus .
Wenn Sie nicht tun, können Sie laufen strip auf die Daten, die Schrägstriche zu entfernen. Um Ihren Code portabel zu machen, sollen Sie zunächst get_magic_quotes_gpc()
überprüfen, um zu sehen, ob es auf und nur dann eingeschaltet wird, dann läuft strip. Auf diese Weise, wenn Sie Ihren Code auf einen Server verschieben, Magic Quotes ausgeschaltet hat, Ihr Code wird immer noch funktionieren.
if(get_magic_quotes_gpc()) {
$a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];