2009-08-04 69 views
7

tôi đang xây dựng một chuỗi trên máy chủ đang được đưa vào biến javascript trên máy khách.Mã hóa dấu nháy đơn

tốt nhất của mã hóa này để tránh bất kỳ vấn đề

ngay bây giờ trên máy chủ tôi đang làm một cái gì đó như thế này là gì:

html = html.Replace("'", "'"); 

nhưng tôi giả sử có một thanh lịch hơn fool cách chứng minh làm những việc như thế này

Trả lời

10

Bạn nên sử dụng Microsoft Anti-Cross Site Scripting Library để thực hiện việc này. Họ cung cấp một phương pháp JavaScriptEncode mà những gì bạn muốn:

Microsoft.Security.Application.AntiXss.JavaScriptEncode("My 'Quotes' and ""more"".", False) 
+0

Đừng quên để không dò tìm nó trên front-end nếu bạn muốn sử dụng nó cho một hộp cảnh báo cho ví dụ. –

+0

Gói Nuget: http://nuget.org/packages/AntiXSS/ –

1

Tôi không chắc chắn trong đó bối cảnh mà bạn đang sử dụng chuỗi này, nhưng \' có thể là những gì bạn đang tìm kiếm. Dấu gạch chéo ngược là ký tự thoát và cho phép bạn sử dụng certain characters mà không thể có mặt trong một chuỗi ký tự. Đây là JavaScript đầu ra trông như thế nào:

alert('It\'s amazing'); 

Tất nhiên, bạn có thể sử dụng alert("It's amazing"); trong trường hợp cụ thể này.

Dù sao, nếu bạn đang xây dựng mã JavaScript:

html = html.Replace("'", "\\'"); 

Mặt khác, có những nhân vật khác ngoài dấu nháy rằng cần một số chế biến. Sử dụng Microsoft Anti-Cross Site Scripting Library sẽ nhận tất cả chúng cùng một lúc.

0

Các ký tự mà bạn cần thoát trong giá trị chuỗi là dấu gạch chéo ngược và ký tự được sử dụng làm dấu phân cách chuỗi.

Nếu dấu nháy (') được sử dụng như chuỗi delimiter:

html = html.Replace(@"\", @"\\").Replace("'", @"\'"); 

Nếu dấu ngoặc kép (") được sử dụng như chuỗi delimiter:

html = html.Replace(@"\", @"\\").Replace(@"""", @"\"""); 

Nếu bạn không biết đó là dấu phân cách sử dụng, hoặc nếu nó có thể thay đổi trong tương lai, bạn chỉ có thể trốn thoát cả hai:

html = html.Replace(@"\", @"\\").Replace("'", @"\'").Replace(@"""", @"\"""); 
1
html = html.Replace("'", "%27"); 
1

Tôi thấy rằng thư viện AntiXSS không thể thực hiện được những gì tôi đang tìm kiếm, để mã hóa phía máy chủ và giải mã trong javascript.

Thay vào đó tôi đã sử dụng Microsoft.JScript.dll cho phép bạn:

GlobalObject.escape(string); 

và trên các mặt hàng trong javascript:

unescape(string); 
Các vấn đề liên quan