Que signifie pour échapper à une chaîne de caractères?
Je lisais N' $_SESSION['username'] doivent être échappé avant d'entrer dans une requête SQL? et il a dit "Vous avez besoin d'échapper à toutes les chaînes que vous passez à la requête sql, quelle que soit son origine". Maintenant, je sais que quelque chose comme cela, c'est vraiment de base. Une recherche Google s'est jusqu'à plus de 20, 000 résultats. Stackoverflow seul avait 20 pages de résultats, mais personne n'explique d'ailleurs que l'échappement d'une chaîne est ou comment le faire. C'est juste des suppositions. Pouvez-vous m'aider? Je veux apprendre, parce que comme toujours, je suis prise d'une application web en PHP.
J'ai regardé:
Insertion De Caractères D'Échappement, Ce sont tous les caractères d'échappement dans Java?,
Cant échapper une chaîne avec addcslashes(),
Caractère d'échappement,
ce n'mysql_real_escape_string() vraiment?,
Comment puis-je échapper les guillemets doubles à partir d'une chaîne de caractères en php?,
MySQL_real_escape_string ne pas ajouter des barres obliques?,
supprimer les séquences d'échappement de chaîne de caractères en php Je pourrais continuer, mais je suis sûr que vous obtenez le point. Ce n'est pas la paresse.
- PS je pouvais avoir juste demandé à un ami et non pas fait un fou de moi-même, mais je pensais qu'il y aurait beaucoup de gens comme moi vous vous demandez ce qu'est cette chose que tout le monde est en train de parler.
Vous devez vous connecter pour publier un commentaire.
Échapper à une chaîne de moyens pour réduire l'ambiguïté entre guillemets (et d'autres caractères) utilisé dans cette chaîne. Par exemple, lorsque vous êtes à la définition d'une chaîne, vous entourent dans des guillemets ou des apostrophes:
Mais que faire si ma chaîne avait des guillemets à l'intérieur de ça?
Maintenant, j'ai l'ambiguïté - l'interprète ne sais pas où ma chaîne se termine. Si je veux garder mes guillemets, j'ai deux options. Je pourrais utiliser des guillemets simples autour de ma chaîne:
Ou je peux échapper à mon devis:
Toute citation est précédée par une barre oblique est échappé, et fait partie de la valeur de la chaîne.
Quand il s'agit de requêtes MySQL a certains mots-clés, il pour les montres que nous ne pouvons pas les utiliser dans nos requêtes sans causer une certaine confusion. Supposons que nous ayons une table de valeurs d'une colonne nommée "Select", et nous avons voulu pour le sélectionner:
Nous avons maintenant introduit une certaine ambiguïté dans notre requête. Au sein de notre requête, nous pouvons réduire cette ambiguïté en utilisant les tiques:
Cela supprime la confusion, nous avons mis en place en utilisant un manque de jugement dans le choix des noms de champ.
Beaucoup de ce qui peut être fait pour vous par un simple passage de vos valeurs à travers
mysql_real_escape_string()
. Dans l'exemple ci-dessous, vous pouvez voir que nous sommes de passage de l'utilisateur les données soumises par le biais de cette fonction afin de s'assurer qu'il ne causera pas de problèmes pour notre requête:D'autres méthodes existent pour échapper à des chaînes, comme
add_slashes
,addcslashes
,quotemeta
, et de plus, même si vous trouverez que lorsque le but est de gérer la sécurité de la requête, en gros, les développeurs préfèrentmysql_real_escape_string
oupg_escape_string
(dans le contexte de PostgreSQL.Certains caractères ont une signification particulière pour le SQL de la base de données que vous utilisez. Lorsque ces caractères sont utilisés dans une requête, ils peuvent provoquer inattendue et/ou involontaires de comportement, y compris en permettant à un utilisateur malveillant de compromettre votre base de données. Pour éviter ces caractères d'affecter une requête en ce sens, ils doivent être échappés, ou pour le dire d'une autre manière, la base de données doit être dit de ne pas les traiter comme des caractères spéciaux dans cette requête.
Dans le cas de
mysql_real_escape_string()
il s'échappe\x00
,\n
,\r
,\
,'
,"
et\x1a
que celles-ci, lorsqu'il n'est pas échappé, peut provoquer, déjà mentionnés, les problèmes qui comprend des injections SQL avec une base de données MySQL.