Escape-Zitat in der Verbindungszeichenfolge web.config


86

Ich habe eine Verbindungszeichenfolge in meiner Webkonfiguration:

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

Wie Sie sehen, enthält das Passwort ein Anführungszeichen (") (von einer anderen Abteilung. Ich kann das Passwort dieses Datenbankbenutzers nicht ändern).

Wie muss ich mich dem Anführungszeichen in dieser Verbindungszeichenfolge entziehen?

Übrigens: Ich habe es bereits versucht & quot; in der Zeichenfolge. Das hat nicht funktioniert - ado.net hat dann eine ArgumenException erhalten: "Das Format der Initialisierungszeichenfolge entspricht nicht der Spezifikation ab Index 57." 57 ist, wo die & quot; ist in meiner Verbindungszeichenfolge. Ich habe auch versucht, den Passwortteil in 'einzuschließen - hat auch nicht funktioniert.

Auch versucht "" und \ "- web.config kann dann nicht analysiert werden.

Danke für die Lösung:

Ich musste das Entkommen des doppelten Anführungszeichens kombinieren und das Passwort in einfache Anführungszeichen setzen:

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

Antworten:


107

Verwenden Sie &quot;statt ", um es zu entkommen.

web.config ist eine XML-Datei, daher sollten Sie XML-Escapezeichen verwenden.

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

Siehe diesen Forenthread.

Update :

&quot;sollte funktionieren, aber haben Sie einige der anderen String-Escape-Sequenzen für .NET ausprobiert? \"und ""?

Update 2:

Versuchen Sie es mit einfachen Anführungszeichen für den connectionString:

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

Oder:

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

Update 3:

Von MSDN (SqlConnection.ConnectionString-Eigenschaft):

Um Werte einzuschließen, die ein Semikolon, ein einfaches Anführungszeichen oder ein doppeltes Anführungszeichen enthalten, muss der Wert in doppelte Anführungszeichen gesetzt werden. Wenn der Wert sowohl ein Semikolon als auch ein doppeltes Anführungszeichen enthält, kann der Wert in einfache Anführungszeichen gesetzt werden.

So:

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

Das Problem liegt nicht bei web.config, sondern beim Format der Verbindungszeichenfolge. Wenn Sie in einer Verbindungszeichenfolge "einen Wert in einem Wert (des Schlüssel-Wert-Paares) haben, müssen Sie den Wert in einschließen '. Also, während Password=somepass"wordes nicht funktioniert, Password='somepass"word'tut es.


Das funktioniert nicht. Dies würde offensichtlich funktionieren, wenn es sich um eine einfache XML-Datei handelt, jedoch nicht innerhalb eines Attributwerts.
Sebastian PR Gingter

@ Sebastian PR Gingter - seltsam, dass dies nicht funktioniert. Haben Sie andere Escape-Sequenzen ausprobiert?
Oded

Ja. Die gesamte Web.config kann bei Verwendung von "" und "nicht analysiert werden." Wird nicht durch "innerhalb der Zeichenfolge ersetzt, und die Abfragezeichenfolge kann nicht analysiert werden, was zu dem angegebenen Fehler führt. Wenn es so einfach wäre, hätte ich hier nicht gefragt ;-)
Sebastian PR Gingter

1
@ Sebastian PR Gingter - die Leute hier können nicht erraten, was Sie versucht haben und was Sie wissen. Sie müssen solche Details in Ihre Frage aufnehmen (wie Sie es jetzt getan haben).
Oded

Welche Codierung verwendet Ihre web.config?
Matthew Abbott

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

Da es sich bei der web.config um XML handelt, müssen Sie die fünf Sonderzeichen maskieren:

&amp;-> & kaufmännisches Und, U + 0026
&lt; -> < linke spitze Klammer, kleiner als das Vorzeichen, U + 003C
&gt; -> > rechte spitze Klammer, größer als das Zeichen, U + 003E
&quot; -> " Anführungszeichen, U + 0022
&apos; -> ' Apostroph, U + 0027

+ ist wohl kein Problem.


Duc Filan fügt hinzu: Sie sollten Ihr Passwort auch in einfache Anführungszeichen setzen ':

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

Es war das kaufmännische Und für mich in einem Passwort, das in der web.config gespeichert war. Offensichtlich, während es gleichzeitig ziemlich nicht offensichtlich ist, es aufzuspüren. Der Fehler, den Sie von einer Azure-Website erhalten, wenn dies in der Datei web.config der Fall ist - "Die Seite kann nicht angezeigt werden, da ein interner Serverfehler aufgetreten ist." Es scheint auch nichts in die Fehlerprotokolle zu schreiben. Vielen Dank an das OP für die Frage und Sie für diese Erinnerung.
Timothy Lee Russell

Was ist mit eckigen Klammern? ([])
Dzianis Yafimau

Und ;Charakter?
Kiquenet

2

Wenn &quot;es nicht funktioniert, versuchen Sie es &#34;stattdessen.


und für Charakter &? &Ampere; ?
Kiquenet

1

Odeds Antwort ist fast vollständig. Nur eine Sache hinzuzufügen.

  1. Escape xml spezielle Zeichen wie Emanuele Greco sagte.
  2. Setzen Sie das Passwort in einfache Anführungszeichen, wie Oded sagte
  3. (dieser ist neu) Entkomme einzelnen Zecken mit einem weiteren einzelnen Häkchen ( ref )

mit diesem Passwort = "'; dies sollte eine gültige Verbindungszeichenfolge sein:

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

Ich denke du meinst password='''';ist gültig. Aber Ihr Vorschlag ist das einzige, was für mich funktioniert hat. Dies wird tatsächlich auch in anderen Fluchtschemata verwendet.
Bluebaron

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.