2009-08-04 19 views
7

İstemcideki bir javascript değişkenine konan sunucuda bir dize yapıyorum.Kodlamayı kesme

i böyle bir şey yapıyorum sunucuda

şu anda herhangi bir sorunları önlemek için bu kodlama en iyi olanı:

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

ama daha zarif aptal kanıt yolu orada olduğunu varsayalım bunun gibi şeyler yapmak.

cevap

10

Bunu yapmak için Microsoft Anti-Cross Site Scripting Library'u kullanmaktan gerçekten daha iyisiniz. Onlar istediğini yapan bir JavaScriptEncode yöntem sağlar:

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

ön uç üzerine okunabilir hale unutmayın Örneğin bir uyarı kutusu için kullanmak isterseniz. –

+0

Nuget paketi: http://nuget.org/packages/AntiXSS/ –

1

ben bu dizeyi kullandığınız hangi bağlamda emin değilim, ama \' aradığınız şey olabilir. Ters eğik çizgi bir kaçış karakteridir ve certain characters'u, bir dize değişmezinde bulunmayan bir şekilde kullanmanıza izin verir. Tabii

alert('It\'s amazing'); 

, bu özel durumda alert("It's amazing"); kullanabilirsiniz: Bu gibi çıkış JavaScript görünmesi gerekiyor. Eğer JavaScript kodu bina eğer

Neyse,: Öte yandan

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

, bazı işleme gerek kesme yanında diğer karakterler vardır. Microsoft Anti-Cross Site Scripting Library'u kullanarak hepsini bir seferde alabilirsiniz.

0

Dize değerinde kaçması gereken karakterler ters eğik çizgi ve karakter dizisi sınırlayıcı olarak kullanılır.

kesme işareti (') dizisini ayırıcı olarak kullanılması halinde:

tırnak işareti (") dizesi ayırıcı olarak kullanılması halinde
html = html.Replace(@"\", @"\\").Replace("'", @"\'"); 

:

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

sen hangi sınırlayıcı bilmiyorsanız kullanılan ya da gelecekte değişebilir eğer, sadece ikisi kaçabilir:

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

AntiXSS kitaplığının, sunucu tarafında kodlama yapmak ve javascript kodunu çözmek için aradığım şeyi gerçekleştiremediğini buldum.

GlobalObject.escape(string); 

ve javascript istemci tarafında:

Onun yerine yapmanızı sağlar Microsoft.JScript.dll kullanılan

unescape(string);