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" />
Sebastian PR Gingter
la source

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.

Oded
la source
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'"
Emanuele Greco
la source
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.

comte
la source
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;;'
Ritzelprimpf
la source
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
0

Utilisez &quot;Cela devrait fonctionner.

tourner sur
la source
Nan. ne fonctionne pas. déjà essayé avant de demander ici ... n'aurait pas demandé ...
Sebastian PR Gingter