2010-04-22 3 views
1

Si j'ai magic_quotes activé et que j'utilise mysql_real_escape_string, la chaîne sera-t-elle double? Cela va-t-il causer des problèmes?Est-ce que l'utilisation de magic_quotes() affecte l'utilisation de mysql_real_escape_string()

Je suppose que basé sur la fonction get_magic_quotes(), mais je cherche juste la confirmation.

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

Répondre

3

Si vous échappez un valeur obtenue à partir de l'entrée get/post/cookie, il aura déjà addslashes() appliqué, donc en passant par mysql_real_escape_string() sera en fait, double citation.

Dépouiller em:

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); 
} 

This question a d'autres options pour décapage citations/traiter 'fonctionnalité' l'magic_quotes_gpc horribles PHP.

+0

ini_set ('magic_quotes_gpc', 0); - drôle un :) –

+0

pourquoi ne pas utiliser habituel array_map_recursive? –

+0

Je ne sais rien à propos des barres obliques ... J'ai seulement découvert ce que contenaient les magic_quotes il y a 15 minutes ... J'essaie de tout comprendre un peu plus ... – sjw

4

Lire la documentation of mysql_real_escape_string (J'espère que ce n'est pas difficile aussi):

Note: Si magic_quotes_gpc est activé, appliquer stripslashes() aux données. L'utilisation de cette fonction sur des données déjà échappées permet d'échapper deux fois les données.

+0

Si je lisais la documentation alors vous n'auriez personne à rabaisser dans ces forums pour vous faire sentir mieux sur vous-même ... – sjw

+6

Je souhaite qu'il y avait une possibilité de downvote un commentaire. –

+0

@Col. Shrapnel - Eh bien, peut-être par procuration. Je viens d'upvoted votre commentaire. –

0

Si je magic_quotes sous tension et j'utilise mysql_real_escape_string, va Tring être deux échappé?

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

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

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

// no more magic quotes 
function get_magic_quotes_gpc() 
{ 
    return false; 
} 
+0

à quoi sert le dernier extrait de code? –

+0

@Col. Shrapnel - peut-être pour produire une erreur? :) – gnarf

+0

@Col. Shrapnel: Cela remplacera la fonction par défaut, donc 'get_magic_quotes_gpc()' ne fera pas ce qu'il fait. – Sarfraz

1

Bien sûr, le plus simple est d'éteindre magic_quotes.
wuth config PHP/Apache habituelle, ceci dans le fichier .htaccess ligne

php_flag magic_quotes_gpc 0 

fera la chose. Mais pour des raisons de compatibilité, une fonction peut également être utilisée dans certains fichiers de configuration.

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

Questions connexes