Trích dẫn thoát trong chuỗi kết nối web.config


87

Tôi có một chuỗi kết nối trong cấu hình web của mình:

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

Như bạn thấy, có một dấu ngoặc kép (") trong mật khẩu (được cung cấp từ ghi nợ khác. Tôi không thể thay đổi mật khẩu người dùng db này).

Làm cách nào để thoát khỏi báo giá trong chuỗi kết nối này?

Btw: Tôi đã thử & quot; trong chuỗi. Điều đó không hoạt động - sau đó ado.net có ArgumenException: "Định dạng của chuỗi khởi tạo không phù hợp với đặc điểm kỹ thuật bắt đầu từ chỉ mục 57." 57 là nơi & quot; nằm trong chuỗi kết nối của tôi. Tôi cũng đã thử thêm phần mật khẩu vào '- cũng không hoạt động.

Cũng đã thử "" và \ "- không thể phân tích cú pháp web.config.

Cảm ơn vì giải pháp:

Tôi đã phải kết hợp việc thoát khỏi dấu nháy kép và đặt mật khẩu trong dấu nháy đơn:

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

Câu trả lời:


109

Sử dụng &quot;thay vì "để thoát khỏi nó.

web.config là một tệp XML, vì vậy bạn nên sử dụng tính năng thoát XML.

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

Xem chủ đề diễn đàn này .

Cập nhật :

&quot;sẽ hoạt động, nhưng vì nó không hoạt động, bạn đã thử một số chuỗi thoát chuỗi khác cho .NET chưa? \"""?

Cập nhật 2:

Thử các dấu ngoặc kép cho kết nối Chuỗi:

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

Hoặc là:

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

Cập nhật 3:

Từ MSDN (Thuộc tính SqlConnection.ConnectionString):

Để bao gồm các giá trị có chứa dấu chấm phẩy, ký tự dấu ngoặc đơn hoặc dấu ngoặc kép, giá trị phải được đặt trong dấu ngoặc kép. Nếu giá trị chứa cả dấu chấm phẩy và ký tự dấu ngoặc kép, giá trị có thể được đặt trong dấu ngoặc kép đơn.

Vì thế:

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

Vấn đề không phải với web.config, mà là định dạng của chuỗi kết nối. Trong một chuỗi kết nối, nếu bạn có một "giá trị trong (của cặp khóa-giá trị), bạn cần bao gồm giá trị trong '. Vì vậy, trong khi Password=somepass"wordkhông hoạt động, Password='somepass"word'không.


Điều này không hoạt động. Điều này hiển nhiên sẽ hoạt động, nếu nó ở dạng xml thuần túy, nhưng không nằm trong giá trị thuộc tính.
Sebastian PR Gingter

@Sebastian PR Gingter - kỳ lạ là điều này không hoạt động. Bạn đã thử các chuỗi thoát khác chưa?
Oded

Đúng. Toàn bộ Web.config không thể được phân tích cú pháp khi sử dụng "" và \ ". & Quot; không được thay thế bằng" trong chuỗi và không thể phân tích chuỗi truy vấn dẫn đến lỗi đã nêu. Nếu nó được dễ dàng tôi sẽ không hỏi ở đây ;-)
Sebastian PR Gingter

1
@Sebastian PR Gingter - mọi người ở đây không thể đoán được những gì bạn đã thử và những gì bạn biết. Bạn cần đưa các chi tiết như vậy vào câu hỏi của mình (như bây giờ bạn có).
Oded

Web.config của bạn sử dụng mã hóa nào?
Matthew Abbott

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

Vì web.config là XML, bạn cần phải loại bỏ năm ký tự đặc biệt:

&amp;-> & dấu và, U + 0026
&lt; -> dấu < ngoặc nhọn bên trái, dấu nhỏ hơn, U + 003C
&gt; -> dấu > ngoặc nhọn bên phải, dấu lớn hơn, U + 003E
&quot; -> " dấu ngoặc kép, U + 0022
&apos; -> ' dấu nháy đơn, U + 0027

+ không phải là vấn đề, tôi cho là vậy.


Duc Filan cho biết thêm: Bạn cũng nên bọc mật khẩu của mình bằng một câu trích dẫn duy nhất ':

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

Đó là ký hiệu và cho tôi, trong một mật khẩu, được lưu trữ trong web.config. Rõ ràng, đồng thời khá không rõ ràng để theo dõi. Lỗi mà Trang web Azure đưa ra cho bạn khi trường hợp này xảy ra trong web.config - "Trang không thể hiển thị vì đã xảy ra lỗi máy chủ nội bộ." Có vẻ như nó cũng không ghi bất kỳ điều gì vào nhật ký lỗi. Cảm ơn OP về câu hỏi và bạn về lời nhắc này.
Timothy Lee Russell,

Còn dấu ngoặc vuông thì sao? ([])
Dzianis Yafimau 24/09/19

;nhân vật?
Kiquenet


1

Câu trả lời của Odeds gần như hoàn thành. Chỉ cần thêm một điều.

  1. Thoát các ký tự đặc biệt xml như Emanuele Greco đã nói.
  2. Đặt mật khẩu trong dấu ngoặc kép như Oded đã nói
  3. (cái này là mới) Thoát khỏi bọ ve bằng một lần đánh dấu khác (tham khảo )

có mật khẩu này = "'; đây sẽ là một chuỗi kết nối hợp lệ:

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

Tôi nghĩ ý bạn password='''';là hợp lệ. Nhưng gợi ý của bạn là điều duy nhất phù hợp với tôi. Điều này thực sự cũng được sử dụng trong các kế hoạch thoát hiểm khác.
Bluebaron

0

Sử dụng &quot;Điều đó sẽ hoạt động.


nope. không hoạt động. đã cố gắng này trước khi hỏi ở đây ... sẽ không hỏi ...
Sebastian PR Gingter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.