Escape kutipan dalam string koneksi web.config


89

Saya memiliki string koneksi di konfigurasi web saya:

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

Seperti yang Anda lihat, ada tanda kutip (") di kata sandi (diberikan dari departemen lain. Saya tidak bisa mengubah kata sandi pengguna db ini).

Bagaimana saya harus keluar dari kutipan dalam string koneksi ini?

Btw: Saya sudah mencoba & quot; dalam string. Itu tidak berhasil - ado.net mendapatkan ArgumenException, maka: "Format string inisialisasi tidak sesuai dengan spesifikasi yang dimulai pada indeks 57." 57 adalah tempat & quot; ada di string koneksi saya. Saya juga mencoba melampirkan bagian kata sandi di '- juga tidak berhasil.

Juga mencoba "" dan \ "- web.config tidak dapat diurai saat itu.

Terima kasih atas solusinya:

Saya harus menggabungkan keluarnya tanda kutip ganda dan memasukkan kata sandi dalam tanda kutip tunggal:

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

Jawaban:


110

Gunakan &quot;sebagai ganti" untuk menghindarinya.

web.config adalah file XML jadi Anda harus menggunakan XML escaping.

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

Lihat ini utas forum .

Memperbarui :

&quot;seharusnya berfungsi, tetapi karena tidak, apakah Anda sudah mencoba beberapa rangkaian escape string lain untuk .NET? \"dan"" ?

Perbarui 2:

Coba tanda kutip tunggal untuk koneksiString:

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

Atau:

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

Perbarui 3:

Dari MSDN (Properti SqlConnection.ConnectionString):

Untuk menyertakan nilai yang berisi karakter titik koma, kutip tunggal, atau kutip ganda, nilai harus diapit oleh tanda kutip ganda. Jika nilai berisi karakter titik koma dan kutip ganda, nilai dapat diapit oleh tanda kutip tunggal.

Begitu:

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

Masalahnya bukan pada web.config, tetapi format string koneksi. Dalam string koneksi, jika Anda memiliki sebuah "nilai (dari key-value pair), Anda perlu memasukkan nilai tersebut ke dalam '. Jadi, meski Password=somepass"wordtidak berhasil, Password='somepass"word'tetap berhasil.


Ini tidak berhasil. Ini jelas akan berhasil, jika dalam xml biasa, tetapi tidak dalam nilai atribut.
Sebastian PR Gingter

@ Sebastian PR Gingter - aneh bahwa ini tidak berhasil. Apakah Anda mencoba urutan pelarian lainnya?
Oded

Iya. Seluruh Web.config tidak dapat diurai saat menggunakan "" dan \ ". & Quot; tidak diganti dengan" dalam string dan string kueri tidak dapat diurai sehingga menghasilkan kesalahan yang dinyatakan. Jika semudah itu saya tidak akan bertanya di sini ;-)
Sebastian PR Gingter

1
@Sebastian PR Gingter - orang di sini tidak dapat menebak apa yang telah Anda coba dan apa yang Anda ketahui. Anda perlu memasukkan rincian seperti itu dalam pertanyaan Anda (seperti yang Anda miliki sekarang).
Oded

Pengkodean apa yang digunakan web.config Anda?
Matthew Abbott

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

Karena web.config adalah XML, Anda perlu keluar dari lima karakter khusus:

&amp;-> & ampersand, U + 0026
&lt; -> < tanda kurung siku kiri, tanda kurang dari, U + 003C
&gt; -> > tanda kurung siku, tanda lebih besar dari, U + 003E
&quot; -> " tanda petik, U + 0022
&apos; -> ' tanda kutip, U + 0027

+ bukan masalah, kurasa.


Duc Filan menambahkan: Anda juga harus membungkus kata sandi Anda dengan kutipan tunggal ':

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

Itu adalah ampersand untuk saya, dalam kata sandi, disimpan di web.config. Jelas, sementara pada saat yang sama cukup tidak jelas untuk dilacak. Kesalahan yang diberikan Situs Web Azure saat ini terjadi di web.config - "Halaman tidak dapat ditampilkan karena telah terjadi kesalahan server internal." Tampaknya juga tidak menulis apa pun ke log kesalahan. Terima kasih kepada OP atas pertanyaannya dan Anda untuk pengingat ini.
Timothy Lee Russell

Bagaimana dengan tanda kurung siku? ([])
Dzianis Yafimau

Dan ;karakter?
Kiquenet


1

Jawaban Odeds hampir selesai. Hanya satu hal untuk ditambahkan.

  1. Escape karakter khusus xml seperti kata Emanuele Greco.
  2. Masukkan kata sandi dalam tanda kutip tunggal seperti kata Oded
  3. (yang ini baru) Keluar dari satu tanda centang dengan tanda centang lainnya ( ref )

memiliki password ini = "'; ini mungkin string koneksi yang valid:

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

Saya pikir maksud Anda password='''';valid. Tetapi saran Anda adalah satu-satunya hal yang berhasil bagi saya. Ini sebenarnya juga digunakan dalam skema pelarian lainnya.
Bluebaron

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.