Question

Si je magic_quotes en marche et j'utiliser mysql_real_escape_string, la chaîne sera le double échappé? Est-il causer des problèmes?

Je suppose donc basée sur la fonction get_magic_quotes() mais juste obtenir la confirmation.

(. P.S Il est plus facile de poser cette question que le test dans mon bureau avec toute la sécurité que nous avons mis en place - Il me faut 10-15 pour tout configurer pour un environnement utilisable)

Était-ce utile?

La solution

Si vous échapper à une valeur obtenue à partir de get / entrée post / cookies, il possède déjà une addslashes() appliquée à , il passe donc par mysql_real_escape_string() sera en fait, guillemet.

Pour em bande:

if (get_magic_quotes_gpc())
{
    $_GET = json_decode(stripslashes(json_encode($_GET, JSON_HEX_APOS)), true);
    $_POST = json_decode(stripslashes(json_encode($_POST, JSON_HEX_APOS)), true);
    $_COOKIE = json_decode(stripslashes(json_encode($_COOKIE, JSON_HEX_APOS)), true);
    $_REQUEST = json_decode(stripslashes(json_encode($_REQUEST, JSON_HEX_APOS)), true);
    ini_set('magic_quotes_gpc', 0);
}

Cette question a d'autres options pour décapage citations / traiter avec PHP horrible magic_quotes_gpc ' fonction.

Autres conseils

Lire la documentation de mysql_real_escape_string (I espérons que ce n'est pas difficile aussi bien):

  

Remarque: Si magic_quotes_gpc est activé, appliquez d'abord stripslashes() aux données. En utilisant cette fonction sur des données qui ont déjà été échappées échappera aux données deux fois.

Bien sûr, la meilleure façon est de mettre magic_quotes hors tension.
wuth PHP habitude / config Apache, cette ligne

php_flag magic_quotes_gpc 0

dans le fichier .htaccess fera la chose.

mais dans le but de compatibilité, une fonction peut être utilisée dans certains fichiers de configuration aussi.

if ( get_magic_quotes_gpc( ) ) {
  $_GET = array_map_recursive('stripslashes', $_GET) ;
  $_POST = array_map_recursive('stripslashes', $_POST) ;
  $_COOKIE = array_map_recursive('stripslashes', $_COOKIE) ;
  $_REQUEST = array_map_recursive('stripslashes', $_REQUEST) ;
  if (isset($_SERVER['PHP_AUTH_USER'])) stripslashes($_SERVER['PHP_AUTH_USER']); 
  if (isset($_SERVER['PHP_AUTH_PW'])) stripslashes($_SERVER['PHP_AUTH_PW']);
}

un des plus faciles

  

Si j'ai magic_quotes sous tension et   J'utilise mysql_real_escape_string, sera   Tring être deux se sont échappés?

Oui, il mais vous pouvez faire quelque chose comme ça si:

if (get_magic_quotes_gpc())
{
  $escaped = stripslashes($your_vars);
}

Remarque: Vous pouvez désactiver les citations magiques de php.ini ou utilisez la fonction ci-dessous pour la remplacer:

// no more magic quotes
function get_magic_quotes_gpc()
{ 
  return false;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top