2009-08-04 13 views
7

estoy construyendo una cadena en el servidor que se pone en una variable de JavaScript en el cliente.apóstrofo de codificación

lo que es el mejor de codificar esto para evitar cualquier problema

en este momento en el servidor que estoy haciendo algo como esto:

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

pero supongo que hay una manera de prueba más elegante tonto haciendo cosas como esta.

Respuesta

10

Usted está realmente mejor usando Microsoft Anti-Cross Site Scripting Library para hacer esto. Proporcionan un método JavaScriptEncode que hace lo que quiere:

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

No se olvide de unescape en el front-end si desea usarlo para un cuadro de alerta, por ejemplo. –

+0

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

1

No estoy seguro de en qué contexto está utilizando esta cadena, pero \' podrían ser lo que estás buscando. La barra diagonal inversa es un carácter de escape y le permite usar certain characters que de otro modo no podría estar presente en una cadena literal. Esto es lo que la salida de JavaScript debe verse como:

alert('It\'s amazing'); 

Por supuesto, se puede usar alert("It's amazing"); en este caso particular.

De todos modos, si usted está construyendo código JavaScript:

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

Por otro lado, hay otros personajes además de apóstrofes que necesitan algún tipo de procesamiento. Usar el Microsoft Anti-Cross Site Scripting Library los obtendría todos a la vez.

0

Los caracteres que necesita para escapar en un valor de cadena son la barra diagonal inversa y el carácter utilizado como delimitador de cadena.

Si se utilizan apóstrofes (') como delimitador de cadena:

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

Si se utilizan las comillas (") como delimitador de cadena:

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

Si no sabe cuál es el delimitador acostumbrado, o si se puede cambiar en el futuro, sólo puede escapar tanto:

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

Encontré que la biblioteca AntiXSS no pudo lograr lo que estaba buscando, que era codificar el lado del servidor y decodificar en javascript.

En lugar de eso utiliza Microsoft.JScript.dll cual le permite:

GlobalObject.escape(string); 

y en el lado del cliente en javascript:

unescape(string); 
Cuestiones relacionadas