tutorial google framework ejemplos java html gwt xss

google - gwt java tutorial



GWT Safe HTML Framework: ¿Cuándo usar y por qué? (2)

La forma más sencilla de ver SafeHtml es como una String en la que se ha escapado adecuadamente cualquier marcado HTML. Esto protege contra ataques de Cross-Site Scripting (XSS) ya que asegura, por ejemplo, si alguien ingresa su nombre en un formulario como <SCRIPT>alert(''Fail'')</SCRIPT> este es el texto que se muestra cuando su página se representa en lugar de ejecutar el JavaScript.

Entonces, en lugar de tener algo como:

String name = getValueOfName(); HTML widget = new HTML(name);

Deberías usar:

String name = getValueOfName(); HTML widget = new HTML(SafeHtmlUtils.fromString(name));

SafeHtmlBuilder es como un StringBuilder excepto que escapa automáticamente del marcado HTML en las cadenas que agrega. Entonces, para extender el ejemplo anterior:

String name = getValueOfName(); SafeHtmlBuilder shb = new SafeHtmlBuilder(); shb.appendEscaped("Name: ").appendEscaped(name); HTML widget = new HTML(shb.toSafeHtml());

Es una buena guía para SafeHtml en la documentación de GWT que vale la pena leer.

Al leer JavaDocs y varios artículos de GWT, de vez en cuando me encuentro con las siguientes clases de Safe* :

  • SafeHtml
  • SafeHtmlBuilder

Parece que SafeHtml se usa de alguna manera al crear un nuevo Widget o Composite , y ayuda a garantizar que el Widget / Composite no ejecute ningún script en el lado del cliente. ¿Es este el caso, o estoy fuera de la base? ¿Alguien puede proporcionar un ejemplo de código de SafeHtml se usa correctamente en acción?

Si es así, ¿cuál es el punto de SafeHtmlBuilder ? ¿Lo usas dentro de un Widget para "construir" HTML seguro?


SafeHtmlBuilder es para SafeHtml lo que StringBuilder es para String .

En cuanto a la API Safe* , SafeStyles siempre que SafeStyles con HTML (o CSS para SafeStyles , o URL para SafeUri y UriUtils ), construyendo HTML / CSS / URL de forma más precisa para alimentar al explorador para su análisis, sin excepción .

De hecho, recientemente discutimos si desaprobar Element.setInnerHtml y otras API similares ( HasHTML ) a favor de Element.setInnerSafeHtml y similares ( HasSafeHtml ).