Escape quote w parametrach połączenia web.config


88

Mam parametry połączenia w mojej konfiguracji internetowej:

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

Jak widzisz, w haśle znajduje się znak cudzysłowu (") (podane z innego działu. Nie mogę zmienić tego hasła użytkowników bazy danych).

Jak mam opuścić cudzysłów w tych parametrach połączenia?

Btw: już próbowałem & bdquo; w ciągu. To nie zadziałało - ado.net dostał wtedy ArgumenException: „Format ciągu inicjalizacyjnego nie jest zgodny ze specyfikacją zaczynającą się od indeksu 57.” 57 jest gdzie & quot; znajduje się w moich parametrach połączenia. Próbowałem też dołączyć część hasła w „- też nie działa.

Wypróbowano również "" i \ "- web.config nie może być wtedy przeanalizowany.

Dzięki za rozwiązanie:

Musiałem połączyć unikanie podwójnego cudzysłowu i umieszczenie hasła w pojedynczych cudzysłowach:

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

Odpowiedzi:


109

Użyj &quot;zamiast, "aby od tego uciec.

web.config to plik XML, więc powinieneś używać znaków ucieczki XML.

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

Zobacz ten wątek na forum.

Aktualizacja :

&quot;powinno działać, ale ponieważ nie działa, czy wypróbowałeś inne sekwencje ucieczki ciągów dla .NET? \"i ""?

Aktualizacja 2:

Wypróbuj apostrofy dla connectionString:

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

Lub:

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

Aktualizacja 3:

Z MSDN (właściwość SqlConnection.ConnectionString):

Aby uwzględnić wartości, które zawierają średnik, znak pojedynczego cudzysłowu lub znak podwójnego cudzysłowu, wartość musi być ujęta w podwójne cudzysłowy. Jeśli wartość zawiera zarówno średnik, jak i znak podwójnego cudzysłowu, można ją ująć w pojedyncze cudzysłowy.

Więc:

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

Problem nie dotyczy pliku web.config, ale formatu parametrów połączenia. W ciągu połączenia, jeśli masz "w wartości (pary klucz-wartość), musisz umieścić wartość w '. Więc chociaż Password=somepass"wordnie działa, Password='somepass"word'działa.


To nie działa. To oczywiście zadziałałoby, gdyby było w zwykłym XML, ale nie w wartości atrybutu.
Sebastian PR Gingter,

@Sebastian PR Gingter - dziwne, że to nie działa. Czy próbowałeś innych sekwencji ucieczki?
Oded

Tak. Cały plik Web.config nie może zostać przeanalizowany, jeśli używa się „” i \ ”.„ ”Nie jest zastępowane przez„ w ciągu ”, a ciągu zapytania nie można przeanalizować, co powoduje podany błąd. Gdyby to było takie proste, nie
pytałbym

1
@Sebastian PR Gingter - ludzie tutaj nie mogą odgadnąć, czego próbowałeś i co wiesz. Musisz podać takie szczegóły w swoim pytaniu (tak jak teraz).
Oded

Jakiego kodowania używa twój web.config?
Matthew Abbott,

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

Ponieważ plik web.config to XML, musisz uciec przed pięcioma znakami specjalnymi:

&amp;-> & ampersand, U + 0026
&lt; -> < lewy nawias ostry, znak mniejszości, U + 003C
&gt; -> > prawy nawias ostry , znak większości, U + 003E
&quot; -> " cudzysłów, U + 0022
&apos; -> ' apostrof, U + 0027

Przypuszczam, że + nie jest problemem.


Duc Filan dodaje: Powinieneś również zawrzeć swoje hasło pojedynczym cudzysłowem ':

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

Dla mnie był to znak ampersand w haśle przechowywanym w pliku web.config. Oczywiste, a jednocześnie dość nieoczywiste jest wyśledzenie. Błąd, który witryna Azure wyświetla w takim przypadku w pliku web.config - „Nie można wyświetlić strony, ponieważ wystąpił wewnętrzny błąd serwera”. Wygląda na to, że nie zapisuje niczego w dziennikach błędów. Dzięki OP za pytanie i Tobie za to przypomnienie.
Timothy Lee Russell,

A co z nawiasami kwadratowymi? ([])
Dzianis Yafimau

A ;charakter?
Kiquenet


1

Odpowiedź Odedsa jest prawie kompletna. Jeszcze jedna rzecz do dodania.

  1. Unikaj specjalnych znaków XML, jak powiedział Emanuele Greco.
  2. Umieść hasło w pojedynczych cudzysłowach, tak jak powiedział Oded
  3. (ten jest nowy) Unikaj pojedynczych tików innym pojedynczym tikiem ( ref )

posiadanie tego hasła = "'; to powinien być prawidłowy ciąg połączenia:

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

Myślę, że masz na myśli, że password='''';jest ważny. Ale twoja sugestia jest jedyną rzeczą, która zadziałała dla mnie. Jest to również używane w innych schematach ucieczki.
Bluebaron

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.