J'ai écrit cette courte fonction pour protéger contre mon injection My_SQL, en raison de son importance, je veux juste vérifier avec d'autres que cela fonctionnera comme je l'intention.
foreach($_REQUEST as $key => $value) { $_REQUEST[$key] = stripslashes($value); $_REQUEST[$key] = mysql_real_escape_string($_REQUEST[$key]); }
6 Réponses :
Vous devez expliquer explicitement l'identifiant de connexion de base de données dans
mysql_real_escape_string(..., $db_connection_identifier);
Donc, si ma connexion est $ Con = mysql_connect ("localhost" ... Je devrais ajouter: $ _Request [$ clé] = mysql_real_escape_string ($ _ Demande [$ clé], $ Con);
oui, pour éviter les problèmes mentionnés ici Stackoverflow.com/questions/4243657/...
Le diagramme de syntaxe indique que l'identifiant de liaison est facultatif. Donc, à moins que vous ayez plusieurs connexions de base de données ouvertes, vous ne devez pas vraiment besoin i> d'ajouter l'argument explicitement.
Si vous incluez une clé arbitraire $ code> S dans votre requête, vous devez vous échapper aussi. P>
Je n'avais pas pensé à ça, je ne le fais pas souvent. Mais je suis heureux que vous ayez amené cela pour le moment où je le fais.
semble être un peu d'approche de Sledgehammer. Vous n'avez pas besoin Casting de type: http://php.net/manual /en/language.types.type-juggling.php p>
Test des citations magiques: http: // www.php.net/manual/fr/function.get-magic-quotes-gpc.php
(Merci karolis) p> Stripslashes code> à moins que votre exécution Magic_Quotes.
La coulée de type peut être plus élégante lorsque vous savez que vous voulez
int code>,
float code> ou
bool code>. P>.
plus d'informations: h1>
Pouvez-vous s'il vous plaît me lier à une ressource avec plus d'informations sur ce que vous proposez de faire
@Johnny si (get_magic_quotes_gpc ()) $ _Request [$ clé] = Stripslashes (valeur $); code>
Eh bien, vous utilisez MAIS NOTE Il n'y a rien de tel que "désinfections universelles". Appelons cela juste citant em>, car c'est ce que c'est tout à propos de. P>
Lors de la citation, vous Pour chaque cas, vous avez besoin d'une citation différente, car chaque utilisation est présente dans un contexte de syntaxe différent. Cela implique également que la cotisation Donc, quelles méthodes utiliseraient-elles pour citer dans ces cas particuliers? (N'hésitez pas à me corriger, il pourrait y avoir des méthodes plus modernes, mais celles-ci fonctionnent pour moi) P>
Stripslashes () code> car le
magic_quotes_gpc code> est défini? Ce code ne fonctionnera donc que lorsque
magic_quotes_gpc code> est défini! Je vous recommanderais de l'éteindre et n'utilisez pas l'appel Strislashes (). P>
comme code> expression pour la requête MySQL li>
magic_quotes_gpc code> sont cassées (toujours assurer qu'il est éteint !!!). P>
mysql_real_escapape_string ($ str) code> li>
mysql_real_escape_string (addcslashes ($ str, "% _")) code> li>
htmlspecialchars ($ str) code> li>
json_encode () code> - uniquement pour UTF8! J'utilise ma fonction pour ISO-8859-2 LI>
mysql_real_escapape_string (addcslashes ($ str, '^. [] $ () $ () | * +? {}')) Code> - Vous ne pouvez pas utiliser preg_quote dans ce cas car le barreau serait échappé deux fois! li>
preg_quote () code> li>
ol>
@Karolis, voulez-vous dire codage de caractères? Je ne pense pas que vous ayez besoin de vérifier le codage du personnage d'entrée, si vous avez tout correctement défini.
Si vous utilisez du PDO (correctement), vous n'avez pas à vous soucier de l'injection MySQL.
échantillon: p> Plus d'informations P> P>
J'ai vu ce type de codage mais n'a jamais connu le but. Je vais le rechercher afin que je puisse commencer à l'utiliser au début de mon prochain projet. Merci
C'est le meilleur moyen d'éviter l'injection SQL.
La suggestion de Tomas est bonne, mais vous devriez toujours les garder à l'esprit, donc cela peut être génial:
Ne modifiez pas les superglobaux. Ils devraient être laissés intacts. Si vous ne courez jamais votre propre code, c'est «OK». Mais une fois que vous commencez à mélanger dans d'autres bibliothèques, ils peuvent s'attendre à ce que vous attendiez / nécessiter des données intactes, et vous avez maintenant géré les choses.