Цитата втечі у рядку підключення web.config


88

У моїй веб-конфігурації є рядок підключення:

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

Як бачите, у паролі є знак лапки (") (наданий з іншого відділу. Я не можу змінити цей пароль користувачів db).

Як мені уникнути цитати у цьому рядку зв’язку?

До речі: я вже пробував & quot; у рядку. Це не спрацювало - тоді ado.net отримав ArgumenException: "Формат рядка ініціалізації не відповідає специфікації, починаючи з індексу 57". 57 - де & quot; знаходиться в моєму рядку з'єднання. Я також спробував вкласти частину пароля в '- теж не спрацювало.

Також спробував "" та \ "- web.config тоді неможливо проаналізувати.

Дякуємо за рішення:

Мені довелося поєднати уникнення подвійної лапки та введення пароля в одинарні лапки:

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

Відповіді:


109

Використовуйте &quot;замість того, "щоб уникнути цього.

web.config - це XML-файл, тому вам слід використовувати XML-екран.

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

Дивіться цю тему форуму.

Оновлення :

&quot;має працювати, але як це не відбувається, чи ви пробували деякі інші послідовності екранування для .NET? \"і ""?

Оновлення 2:

Спробуйте одинарні лапки для connectionString:

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

Або:

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

Оновлення 3:

З MSDN (властивість SqlConnection.ConnectionString):

Щоб включити значення, що містять крапку з комою, символ із одинарними лапками або символ із подвійними лапками, значення має бути укладене у подвійні лапки. Якщо значення містить як крапку з комою, так і подвійні лапки, це значення може бути вкладено в одинарні лапки.

Тому:

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

Проблема не в web.config, а у форматі рядка підключення. У рядку з'єднання, якщо у вас є "значення in (з пари ключ-значення), вам потрібно вкласти значення в '. Отож, поки Password=somepass"wordне працює, але Password='somepass"word'працює.


Це не працює. Це, очевидно, спрацювало б, якби це був звичайний xml, але не в межах значення атрибута.
Sebastian PR Gingter

@ Себастьян PR Гінгтер - дивно, що це не працює. Ви пробували інші послідовності втечі?
Од

Так. Весь Web.config не може бути проаналізований при використанні "" та \ ". & Quot; не замінено на" всередині рядка, і рядок запиту не може бути проаналізований, що призведе до зазначеної помилки. Якби це було так просто, я б не запитував тут ;-)
Себастьян PR Гінгтер

1
@Sebastian PR Gingter - люди тут не можуть здогадатися, що ви пробували і що знаєте. Вам потрібно включити у своє запитання такі деталі (як зараз).
Вихід

Яке кодування використовує ваш web.config?
Метью Ебботт

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

Оскільки web.config - це XML, вам потрібно уникнути п’яти спеціальних символів:

&amp;-> & амперсанд, U + 0026
&lt; -> < ліва кутова дужка, знак менше, U + 003C
&gt; -> пряма > кутова дужка, знак більше, U + 003E
&quot; -> лапка " , U + 0022
&apos; -> ' апостроф, U + 0027

+ це не проблема, я гадаю.


Duc Filan додає: Вам також слід обернути свій пароль однією лапкою ':

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

Це був амперсанд для мене в паролі, що зберігається в web.config. Очевидно, хоча в той же час є досить неочевидним для відстеження. Помилка, яку видає веб-сайт Azure, коли це відбувається у web.config - "Сторінку неможливо відобразити, оскільки сталася внутрішня помилка сервера." Схоже, що-небудь нічого не записує до журналів помилок. Дякую ОП за запитання та Вас за це нагадування.
Тімоті Лі Рассел

А як щодо квадратних дужок? ([])
Dzianis Yafimau

А ;характер?
Кікенет,


1

Відповідь на Odeds майже повна. Додайте лише одне.

  1. Рятуйте спеціальні символи xml, як сказав Емануеле Греко.
  2. Введіть пароль в одинарні лапки, як сказав Одед
  3. (цей новий) Уникайте одиночних кліщів за допомогою іншого одинарного кліку ( посилання )

маючи цей пароль = "'; це може бути дійсним рядком підключення:

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

Я думаю, ви маєте на увазі password='''';дійсне. Але ваша пропозиція - це єдине, що мені вдалося. Це насправді використовується і в інших схемах втечі.
Bluebaron

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.