2010-11-23 5 views
1

Mes Magic_Quotes ont toujours été allumées et seulement aujourd'hui j'ai vu que ça devenait déprécié. Si je l'ai éteint, puis-je simplement échapper à toutes les entrées de l'utilisateur (que ce soit utilisé dans ma base de données ou non). Je ne peux définitivement pas revenir en arrière et réécrire toutes mes requêtes de base de données pour utiliser mysql_real_escape_string(). Puis-je simplement parcourir tous mes $ _GET, $ _POST et $ _SESSION et appliquer mysql_real_escape_string()?PHP Magic Quotes quick fix

+3

Juste pour que vous savez "dépréciée" et " déprécié "sont deux choses différentes. :) –

+2

Je pense qu'il devrait plutôt être "Je ne * veux certainement pas * revenir en arrière et réécrire toutes mes requêtes de base de données". – Gumbo

Répondre

3

mysql_real_escape_string et magic_quotes_gpc sont deux choses différentes. Les guillemets magiques ne rendent pas votre entrée suffisamment sûre pour les requêtes SQL.

Si vous le souhaitez ou non, devrait convertir toutes vos requêtes de base de données pour utiliser un mécanisme d'échappement approprié, ou laisser votre application ouverte à des problèmes de sécurité comme l'injection SQL. Vous ne pouvez pas vraiment appliquer mysql_real_escape_string directement sur $ _GET, $ _POST, etc. car cela pourrait gâcher vos données d'entrée si vous en avez besoin pour autre chose que SQL (comme la validation de formulaire et autres).

+0

Dans mon cas, il serait probablement plus facile de réparer les choses que ça gâche plutôt que de revenir en arrière et recoder des milliers de requêtes. – Juddling

+0

Comment saurez-vous ce qui est cassé? La seule solution sûre a toujours été de s'assurer que chaque requête est correctement échappée. – Hamish

2

Éteignez-le. La douleur du recodage à la main, au cas par cas, pâlit par rapport à l'agonie d'être piraté.

0

Oui, vous pouvez, mais n'oubliez pas que vous pouvez également envoyer des tableaux via GPC. ?var[1]=data. Il est à noter que magic_quotes_gpc a été retiré pour une bonne raison et je parie beaucoup de bières que votre application est très vulnérable à l'injection SQL.

if (!get_magic_quotes_gpc()) { 
    function my_escape(&$value, $key) {$value = mysql_real_escape_string($value);} 
    $gpc = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST); 
    array_walk_recursive($gpc, 'my_escape'); 
} 
+0

Il peut ne pas être approprié d'échapper tous les globals pour l'utilisation de MySQL. – stillstanding

+0

@stillstanding yep, et il n'arrêtera pas toute l'injection sql. – rook

+0

Pourquoi ne stopperait-il pas une attaque? – Juddling

1

See here click

C'est la méthode que je l'utilise. Si vous utilisez un changement de méthode de cas, connectez simplement le fichier index.php. deuxième méthode, vous devez ajouter à chaque page.

  1. index.php? Page = accueil
  2. index.php? Page = deux ...

DEUXIÈME CODE ADD MÉTHODE PAR PAGE

  1. inde x.php
  2. contact.php
  3. product.php ....

Recommandé: simple page requête cas/commutateur

// Magic Quotes Fix 
if (ini_get('magic_quotes_gpc')) { 
    function clean($data) { 
     if (is_array($data)) { 
      foreach ($data as $key => $value) { 
       $data[clean($key)] = clean($value); 
      } 
     } else { 
      $data = stripslashes($data); 
     } 

     return $data; 
    }   

    $_GET = clean($_GET); 
    $_POST = clean($_POST); 
    $_REQUEST = clean($_REQUEST); 
    $_COOKIE = clean($_COOKIE); 
}