Citation d'échappement dans la chaîne de connexion web.config


88

J'ai une chaîne de connexion dans ma configuration Web:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass"word" providerName="System.Data.SqlClient" />

Comme vous le voyez, il y a un signe de guillemet (") dans le mot de passe (donné par un autre service. Je ne peux pas changer le mot de passe des utilisateurs de la base de données).

Comment dois-je échapper à la citation dans cette chaîne de connexion?

Btw: j'ai déjà essayé & quot; dans la chaîne. Cela n'a pas fonctionné - ado.net a alors obtenu une ArgumenException: "Le format de la chaîne d'initialisation n'est pas conforme à la spécification commençant à l'index 57." 57 est l'endroit où le & quot; est dans ma chaîne de connexion. J'ai également essayé d'inclure la partie mot de passe dans '- ne fonctionnait pas non plus.

Également essayé "" et \ "- web.config ne peut pas être analysé alors.

Merci pour la solution:

J'ai dû combiner l'échappement des guillemets doubles et mettre le mot de passe entre guillemets simples:

<add name="MyConString" connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'" providerName="System.Data.SqlClient" />

Réponses:


109

Utilisez &quot;au lieu de "pour y échapper.

web.config est un fichier XML, vous devez donc utiliser l'échappement XML.

connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

Voir ce fil de discussion.

Mettre à jour :

&quot;devrait fonctionner, mais comme ce n'est pas le cas, avez-vous essayé certaines des autres séquences d'échappement de chaîne pour .NET? \"et ""?

Mise à jour 2:

Essayez des guillemets simples pour la chaîne connectionString:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass"word'

Ou:

connectionString='Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word'

Mise à jour 3:

À partir de MSDN (propriété SqlConnection.ConnectionString):

Pour inclure des valeurs contenant un point-virgule, un caractère guillemet simple ou un caractère guillemet double, la valeur doit être placée entre guillemets doubles. Si la valeur contient à la fois un point-virgule et un caractère guillemet double, la valeur peut être placée entre guillemets simples.

Donc:

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

Le problème ne vient pas de web.config, mais du format de la chaîne de connexion. Dans une chaîne de connexion, si vous avez un "dans une valeur (de la paire clé-valeur), vous devez inclure la valeur dans '. Donc, bien que Password=somepass"wordcela ne fonctionne pas, Password='somepass"word'cela fonctionne.


Cela ne marche pas. Cela fonctionnerait évidemment, s'il était en XML brut, mais pas dans une valeur d'attribut.
Sebastian PR Gingter

@Sebastian PR Gingter - étrange que cela ne fonctionne pas. Avez-vous essayé d'autres séquences d'échappement?
Oded le

Oui. L'ensemble de Web.config ne peut pas être analysé lors de l'utilisation de "" et \ "." N'est pas remplacé par "dans la chaîne et la chaîne de requête ne peut pas être analysée, ce qui entraîne l'erreur indiquée. Si c'était aussi simple que ça, je n'aurais pas demandé ici ;-)
Sebastian PR Gingter

1
@Sebastian PR Gingter - les gens ici ne peuvent pas deviner ce que vous avez essayé et ce que vous savez. Vous devez inclure ces détails dans votre question (comme vous l'avez maintenant).
Oded le

Quel encodage votre web.config utilise-t-il?
Matthew Abbott

62
connectionString="Server=dbsrv;User ID=myDbUser;Password=somepass&quot;word"

Puisque le web.config est XML, vous devez échapper les cinq caractères spéciaux:

&amp;-> & esperluette, U + 0026
&lt; -> < crochet à angle gauche, signe inférieur à, U + 003C
&gt; -> > crochet à angle droit, signe supérieur à, U + 003E
&quot; -> " guillemet, U + 0022
&apos; -> ' apostrophe, U + 0027

+ ce n'est pas un problème, je suppose.


Duc Filan ajoute: Vous devez également envelopper votre mot de passe avec un guillemet simple ':

connectionString="Server=dbsrv;User ID=myDbUser;Password='somepass&quot;word'"

C'était l'esperluette pour moi, dans un mot de passe, stocké dans le web.config. Évident, tout en étant assez peu évident à retracer. L'erreur qu'un site Web Azure vous donne lorsque c'est le cas dans le fichier web.config - «La page ne peut pas être affichée car une erreur de serveur interne s'est produite». Il ne semble pas non plus écrire quoi que ce soit dans les journaux d'erreurs. Merci à l'OP pour la question et à vous pour ce rappel.
Timothy Lee Russell

Qu'en est-il des crochets? ([])
Dzianis Yafimau

Et le ;caractère?
Kiquenet le

2

si cela &quot;ne fonctionne pas, essayez à la &#34;place.


et pour le caractère &? & amp; ?
Kiquenet

1

La réponse d'Odeds est presque complète. Juste une chose à ajouter.

  1. Échapper aux caractères spéciaux XML comme l'a dit Emanuele Greco.
  2. Mettez le mot de passe entre guillemets simples comme Oded l'a dit
  3. (celui-ci est nouveau) Échappez aux ticks simples avec un autre tick simple ( ref )

ayant ce mot de passe = "'; cela devrait être une chaîne de connexion valide:

connectionString='Server=dbsrv;User ID=myDbUser;Password='&quot;&amp;&amp;;'

Je pense que vous voulez dire password='''';est valide. Mais votre suggestion est la seule chose qui a fonctionné pour moi. Ceci est également utilisé dans d'autres schémas d'échappement.
Bluebaron le

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.