2013-08-30 4 views
-1

Pour empêcher les attaques par injection SQL avant de faire des requêtes (y compris INSERT), j'utilise mysql_real_escape_string.php/mysql real_escape et les caractères spéciaux

Le problème est que si les données à saisir ont un caractère spécial, MYSQL semble insérer la barre oblique dans la base de données lors de l'insertion.

Ensuite, lorsque j'affiche le champ sur une page Web, la barre oblique apparaît.

Idéalement, je ne veux pas avoir des barres obliques avant des caractères spéciaux dans les tableaux dbase que cela nécessitera beaucoup d'entretien en cours pour supprimer des barres obliques lors de l'affichage des données, etc.

est-il de toute façon à stocker dans la base de données sans inclure le backslash?

comme exemple:

$field = "bob's data"; 
...establish database connection 
$field = mysql_real_escape_string($field); 
$sql="INSERT INTO table (field) VALUES ('$field')"; 
if (!mysql_query($sql,$con)) 
    { 
    die('Error: ' . mysql_error()); 
    } 

met "bob les données de \" dans la base de données.

Y a-t-il une manière de gérer cela différemment pour ne pas avoir de barres obliques dans la base de données? Remarque: Je sais que la méthode préférée pour faire qureris est d'utiliser des requêtes paramétrées ou pdo mais pour diverses raisons, ne peut pas le faire dans ce cas car il s'agit d'un énorme site web.

Merci d'avance pour vos suggestions.

+0

Google pour 'magic_quotes' – zerkms

+0

Avez-vous vraiment attribuer' field' $ littéralement comme ça, ou est-il venu de '_GET' $ ou' $ _POST'? Si cela venait de l'entrée du client, 'magic_quotes' pourrait être le problème, comme l'indique @zerkms. Si c'est littéral, je ne crois pas que cela se passe comme vous le dites. – Barmar

+0

Il est venu d'un message d'un textarea. Je viens de l'écrire ainsi en question pour illustrer le cas où l'entrée a une apostrophe. Je ne pense pas que les citations magiques soient allumées. – user1904273

Répondre

0

Je pense que vous pouvez utiliser quelque chose comme ceci avant de traiter n'importe quel objet GET, POST, COOKIE ou REQUEST.

function removeMagiQuotes() 
{ 
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); 
} 
}