ma variable GET est échappé?
-
29-09-2019 - |
Question
Je suis vraiment confus ici, quelqu'un peut-il me l'expliquer?
demande:
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/>";
résultat:
String\'s
String's
----------------
String\'s
String's
Quelqu'un pourrait-il me expliquer non seulement pourquoi ma variable GET est transformée comme ça, mais comment je peux supprimer ce comportement, tel que mon entrée est exactement comme il a été envoyé? Je vais avoir un problème où mon emballage SQL passe par ce mysql_real_escape_string () et finit par être String\\\'s
: (
La solution
Il est appelé "citations magiques" .
Autres conseils
Vous pouvez et devrait désactiver les citations magiques.
Mode préféré
les mettre hors dans php.ini
mode .htaccess
ajouter à votre fichier .htaccess
php_flag magic_quotes_gpc off
Mode d'exécution 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');
}
?>
Mode d'exécution 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);
}
?>
Bienvenue au club du magic_quotes
ennemi! :)
Vous avez probablement les guillemets magiques activés. Cela échappe automatiquement GET, POST et COOKIE données. Magic quotes est mauvais et ne doivent pas compter sur eux pour échapper correctement les données.
Si vous avez accès à php.ini, vous pouvez magie tour citations hors .
Si vous ne le faites pas, vous pouvez exécuter stripslashes sur les données pour supprimer les barres obliques. Afin de rendre votre code portable, vous devez d'abord vérifier get_magic_quotes_gpc()
pour voir si elle est activée et ne puis exécutez stripslashes. De cette façon, si vous déplacez votre code à un serveur qui a des citations magiques est désactivé, votre code encore du travail.
if(get_magic_quotes_gpc()) {
$a = stripslashes($_GET["var"]);
}
else $a = $_GET["var"];