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
).