2012-01-18 19 views
10

Tengo un poco de entrada de usuario. Dentro de mi código que garantizará que la siguiente canta hayan escapado:HTML-Entidad de escape para evitar XSS

& -> & 
< -> &lt; 
> -> &gt; 

En OWASP leo, que hay más caracteres con formato de escape.

Para los atributos que hago otro tipo de escape:.

& -> &amp; 
" -> &quot; 

Se garantiza, que todos los atributos están encerrados por" Esto me hace seguro sobre mis html atributos, pero no sobre el HTML en sí

.

me pregunto, si mi escape es suficiente. he leído this post, pero todavía no estoy seguro de mi preocupación.

(JavaScript se escaparon con el OWASP-Biblioteca)

+0

''-> '' y '% -> &perc; '(para XSS, caracteres de codificación por% 34, etc.) –

+0

@JoopEggen ¿En qué caso sería reemplazar'% 'por' &perc; 'útil? – Gumbo

+0

@Gumbo '&perc;' es de hecho menos útil contra XSS, pero puede ofuscar URL. Los navegadores no toman un código de porcentaje para su char, es decir: '' no invoca javascript. –

Respuesta

25

que usen la lista (ESAPI) biblioteca, así, para escapar de las cadenas para diferentes tipos de pantalla, utilice:

String html = ESAPI.encoder().encodeForHTML("hello <how> are 'you'"); 
String html_attr = ESAPI.encoder().encodeForHTMLAttribute("hello <how> are 'you'"); 
String js = ESAPI.encoder().encodeForJavaScript("hello <how> are 'you'"); 

HTML (asumir JSP)

<tag attr="<%= html_attr %>" onclick="alert('<%= js %>')"><%= html %></tag> 

actualización()

Como codificadores ESAPI se consideran legacy, se ha creado una mejor alternativa y se está manteniendo de forma activa; en su lugar, le recomendaría usar el OWASP Java Encoder.

Si su proyecto ya usa ESAPI, se ha agregado un integration que le permitirá utilizar esta biblioteca para la codificación.

El uso se explica en su wiki page, pero en aras de finalización, así es como se puede usar para codificar contextualmente sus datos:

// HTML Context 
String html = Encoder.forHtml("u<ntrus>te'd'"); 

// HTML Attribute Context 
String htmlAttr = Encoder.forHtmlAttribute("u<ntrus>te'd'"); 

// Javascript Attribute Context 
String jsAttr = Encoder.forJavaScriptAttribute("u<ntrus>te'd'"); 

HTML (asumir JSP)

<div data-attr="<%= htmlAttr %>" onclick="alert('<%= jsAttr %>')"> 
    <%= html %> 
</div> 

PS: existen más contextos y son compatibles con la biblioteca

+0

Como mencioné, utilizo OWASP para escapar de Javascript-Strings. Pero tengo un código heredado, que es producido por apache cocoon. Este código está escapando como lo describí. Mi pregunta es: ¿es suficiente escaparse? Si no (y solo si no) tendré que modificar ~ 200 XSL-Stylesheet línea por línea. –

+0

imho, no creo que sea suficiente, simplemente al marcar este sitio (http://ha.ckers.org/xss.html) usted ya puede determinar que su escape no es suficiente – epoch

+0

Gracias por ese recurso. –

1

recomiendo que utilice la biblioteca Appache Común Lang para escapar de las cadenas, por exmaple escapar HTML:

String escapedString = org.apache.commons.lang.StringEscapeUtils.escapeHtml(String str); 

la biblioteca tiene muchos métodos útiles para escapar en HTML, XML, Javascript.

+0

No creo que la lang lib común se pruebe para la entrada deliberadamente maliciosa de la misma manera que ESAPI. – avgvstvs

+5

En realidad, StringEscapeUtils no escapa de comillas simples '' 'en' ' ', por lo que no es adecuado para escapes de HTML para evitar XSS –

Cuestiones relacionadas