Evita la citazione nella stringa di connessione web.config


89

Ho una stringa di connessione nella mia configurazione web:

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

Come vedi, c'è un segno di citazione (") nella password (data da un altro dipartimento. Non posso cambiare la password di questo db utenti).

Come devo sfuggire alle virgolette in questa stringa di connessione?

Btw: ho già provato & quot; nella stringa. Non ha funzionato - ado.net ha ricevuto un'eccezione ArgumenException: "Il formato della stringa di inizializzazione non è conforme alle specifiche a partire dall'indice 57". 57 è dove il & quot; è nella mia stringa di connessione. Ho anche provato a racchiudere la parte della password in '- non ha funzionato neanche.

Ho anche provato "" e \ "- web.config non può essere analizzato allora.

Grazie per la soluzione:

Ho dovuto combinare l'escape delle virgolette e mettere la password tra virgolette singole:

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

Risposte:


110

Usa &quot;invece di "sfuggirgli.

web.config è un file XML quindi dovresti usare l'escape XML.

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

Vedi questo thread del forum.

Aggiornamento :

&quot;dovrebbe funzionare, ma poiché non funziona, hai provato alcune delle altre sequenze di escape di stringhe per .NET? \"e ""?

Aggiornamento 2:

Prova virgolette singole per connectionString:

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

O:

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

Aggiornamento 3:

Da MSDN (proprietà SqlConnection.ConnectionString):

Per includere valori che contengono punto e virgola, virgolette singole o virgolette doppie, il valore deve essere racchiuso tra virgolette doppie. Se il valore contiene sia un punto e virgola che un carattere di virgolette doppie, il valore può essere racchiuso tra virgolette singole.

Così:

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

Il problema non riguarda web.config, ma il formato della stringa di connessione. In una stringa di connessione, se hai un "in a valore (della coppia chiave-valore), devi racchiudere il valore in '. Quindi, anche Password=somepass"wordse non funziona, Password='somepass"word'funziona.


Questo non funziona. Questo ovviamente funzionerebbe, se fosse in XML semplice, ma non all'interno di un valore di attributo.
Sebastian PR Gingter

@Sebastian PR Gingter - strano che questo non funzioni. Hai provato altre sequenze di fuga?
Oded

Sì. L'intero Web.config non può essere analizzato quando si utilizza "" e \ ". & Quot; non viene sostituito con" all'interno della stringa e la stringa di query non può essere analizzata risultando nell'errore indicato. Se fosse così facile non avrei chiesto qui ;-)
Sebastian PR Gingter

1
@Sebastian PR Gingter - le persone qui non possono indovinare cosa hai provato e cosa sai. Devi includere tali dettagli nella tua domanda (come ora hai).
Oded

Quale codifica utilizza il tuo web.config?
Matthew Abbott

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

Poiché web.config è XML, è necessario eseguire l'escape dei cinque caratteri speciali:

&amp;-> e & commerciale, U + 0026
&lt; -> < parentesi angolare sinistra, segno minore di, U + 003C
&gt; -> > parentesi angolare destra, segno maggiore, U + 003E
&quot; -> " virgolette, U + 0022
&apos; -> ' apostrofo, U + 0027

+ non è un problema, suppongo.


Duc Filan aggiunge: Dovresti anche racchiudere la tua password con virgolette singole ':

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

Per me era la e commerciale, in una password, memorizzata in web.config. Ovvio, ma allo stesso tempo non ovvio da rintracciare. L'errore fornito da un sito Web di Azure in questo caso nel file web.config: "Impossibile visualizzare la pagina perché si è verificato un errore interno del server". Non sembra nemmeno scrivere nulla nei log degli errori. Grazie all'OP per la domanda e a te per questo promemoria.
Timothy Lee Russell

E le parentesi quadre? ([])
Dzianis Yafimau

E il ;carattere?
Kiquenet,


1

La risposta di Odeds è quasi completa. Solo una cosa da aggiungere.

  1. Esci dai caratteri speciali xml come ha detto Emanuele Greco.
  2. Metti la password tra virgolette singole come ha detto Oded
  3. (questo è nuovo) Evita i singoli tick con un altro singolo tick ( ref )

avere questa password = "'; questa potrebbe essere una stringa di connessione valida:

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

Penso che tu intenda che password='''';sia valido. Ma il tuo suggerimento è l'unica cosa che ha funzionato per me. Questo è effettivamente utilizzato anche in altri schemi di fuga.
Bluebaron

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.