Que dois-je échapper lors de l'envoi d'une requête?

voix
18

Lorsque vous exécutez une requête SQL, vous devez nettoyer vos chaînes ou les utilisateurs peuvent exécuter SQL malveillant sur votre site Web.

D'habitude, j'ai juste une fonction escape_string (bla), qui:

  • (Échappements remplace \) avec double échappe ( \\).
  • Remplace les apostrophes ( ') avec une seule citation échappé ( \').

Est-ce suffisant? Y at-il un trou dans mon code? Y at-il une bibliothèque qui peut le faire rapidement et de manière fiable pour moi?

Je voudrais voir des solutions gracieuses en Perl, Java et PHP.

Créé 05/08/2008 à 19:45
source utilisateur
Dans d'autres langues...                            


11 réponses

voix
7

Pour une sécurité maximale, la performance et l'exactitude utiliser des instructions préparées. Voici comment faire cela avec beaucoup d'exemples dans différentes langues, y compris PHP:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

Créé 05/08/2008 à 20:38
source utilisateur

voix
2

Je voudrais aussi échapper des commentaires (double tiret)

--
Créé 05/08/2008 à 19:46
source utilisateur

voix
1

Une grande chose à utiliser en PHP est l' AOP . Il faut beaucoup de la conjecture hors de faire face à la sécurisation de votre SQL (et tous vos trucs SQL en général). Il prend en charge les commandes préparées, qui vont un long chemin vers contrant les attaques par injection SQL.

Une grande introduction sur PDO est inclus dans le livre L'anthologie PHP 101 Essential Astuces et conseils Hacks par Davey Shafik etc. 2e éd . Rend l' apprentissage un jeu d' enfant et est excellent comme référence. Je n'ai même pas penser à autre chose que la requête SQL réelle plus.

Créé 05/08/2008 à 20:28
source utilisateur

voix
0

Dans la requête MySQL, lorsque vous utilisez LIKE, également vous assurer d'échapper aux caractères « _ » comme il est pas échappé par mysql_real_escape_string.

Pour référence, vérifier ici

Créé 14/10/2008 à 05:57
source utilisateur

voix
0

Utilisez les commandes préparées.

Créé 16/09/2008 à 22:14
source utilisateur

voix
0

l'API MySQL C dispose de son propre mysql_escape_string(). Son utilisation ou son équivalent serait le mieux.

Créé 14/08/2008 à 18:59
source utilisateur

voix
0

Utiliser des requêtes préparées / paramétrées!

Créé 05/08/2008 à 20:55
source utilisateur

voix
0

En PHP, j'utilise celui-ci et je vais apprécier tous les commentaires à ce sujet:

function quote_smart($valeur) 
{ 
    if (get_magic_quotes_gpc()) 
        $valeur = stripslashes($valeur); 

    if (!is_numeric($valeur)) 
        $valeur = mysql_real_escape_string($valeur); 

    return $valeur; 
}


$IdS = quote_smart($_POST['theID']); 
$sql = " 
SELECT * FROM Students 
WHERE IdStudent={$IdS}; 
";

A besoin d'un plus de vérification si un champ peut être NULL:

$picture = NULL;
$theidyouwant = 7;
$Name = 'WOOD';


if(is_null($picture)) 
    $p = 'NULL'; 
else
    $p = "'".quote_smart($picture)."'"; 

$IdS = quote_smart($theidyouwant);

$requete = "SELECT * FROM Students
    WHERE IdStudent={$IdS} AND
    PictureStudent={$p} AND
    NameStudent='{$Name}';
    ";

Ca y est en profiter! (Espérons que le message sera correctement envoyer des underscores et non & # 95;)

Créé 05/08/2008 à 20:21
source utilisateur

voix
0

Vous êtes mieux d'utiliser les commandes préparées avec des espaces réservés. Est-ce que vous utilisez PHP, .NET ... De toute façon, les commandes préparées fournira plus de sécurité, mais je ne pouvais fournir un échantillon.

Créé 05/08/2008 à 19:48
source utilisateur

voix
0

Quelle langue utilisent? Il semble que à peu près tous ont des fonctions intégrées d'échappement SQL qui serait préférable d'utiliser.

Par exemple, PHP a mysql_real_escape_string et addslashes .

Créé 05/08/2008 à 19:46
source utilisateur

voix
-1

Je ne sais pas si MySql prend en charge les requêtes paramétrées, le cas échéant, vous devriez faire un effort pour aller dans cette voie. Cela permettra d'assurer l'entrée des utilisateurs ne peut rien faire malveillant.

Sinon, certains « mauvais », en plus de ce que vous avez mentionné seraient-virgule (;) et commentaires (- et / * * /).

Créé 05/08/2008 à 19:49
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more