mysql - vue - De quoi ai-je besoin pour m'échapper lors de l'envoi d'une requête?




vue mysql (8)

En PHP, j'utilise celui-ci et j'apprécierai chaque commentaire à 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}; 
";

Nécessite une vérification supplémentaire 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}';
    ";

C'est bon! (J'espère que le message enverra correctement les caractères de soulignement et pas # 95;)

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

J'ai juste juste une fonction escape_string (blah), qui:

  • Remplace les échappements ( \ ) par des doubles échappements ( \\ ).
  • Remplace les guillemets simples ( ' ) par un guillemet unique échappé ( \' ).

Est-ce adéquat? Y a-t-il un trou dans mon code? Y a-t-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.


Il vaut mieux utiliser des instructions préparées avec des espaces réservés. Utilisez-vous PHP, .NET ... de toute façon, les instructions préparées fourniront plus de sécurité, mais je pourrais fournir un exemple.


Je ne suis pas sûr que MySql supporte les requêtes paramétrées, si c'est le cas, vous devriez essayer de suivre cette voie. Cela garantira que les utilisateurs ne peuvent rien faire de malveillant.

Sinon, certains "mauvais" caractères en plus de ce que vous avez mentionné seraient des points-virgules (;) et des commentaires (- et / * * /).


Quelle langue utilise? Il semble que presque tous ont des fonctions d'échappement SQL intégrées qu'il serait préférable d'utiliser.

Par exemple, PHP a mysql_real_escape_string et addslashes .


Utilisez les requêtes préparées / paramétrées!


Utilisez des instructions préparées.


l'API MySQL C possède sa propre fonction mysql_escape_string() . L'utiliser ou son équivalent serait le meilleur.






security