6

JavaDocsやさまざまなGWTの記事を読んでいるときに、次のSafe*クラスに遭遇することがあります。

  • SafeHtml
  • SafeHtmlBuilder

SafeHtmlこれは、新しいWidgetまたはを作成するときに何らかの形で使用されているように見えComposite、ウィジェット/コンポジットがクライアント側でスクリプトを実行しないようにするのに役立ちます。これは事実ですか、それとも私はオフベースですか?SafeHtml誰かが実際に適切に使用されているコード例を提供できますか?

もしそうなら、それでは何のポイントSafeHtmlBuilderですか?ウィジェット内でそれを使用して、安全なHTMLを何らかの方法で「構築」しますか?

4

2 に答える 2

9

表示する最も簡単な方法は、HTMLマークアップが適切にエスケープされている場所SafeHtmlとして表示することです。Stringこれにより、クロスサイトスクリプティング(XSS)攻撃から保護されます。たとえば、<SCRIPT>alert('Fail')</SCRIPT>JavaScriptが実行されているのではなく、ページがレンダリングされたときに表示されるテキストであるため、誰かがフォームに名前を入力した場合などです。

したがって、次のようなものを使用する代わりに、次のようにします。

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

次を使用する必要があります。

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

SafeHtmlBuilderStringBuilder追加した文字列のHTMLマークアップを自動的にエスケープすることを除いては似ています。したがって、上記の例を拡張するには、次のようにします。

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

これは、読む価値のあるGWTドキュメントの優れたガイドです。SafeHtml

于 2012-10-23T10:05:17.787 に答える
8

SafeHtmlBuilderにあるSafeHtmlものStringBuilderにありStringます。

Safe*APIに関しては、HTML(またはCSS for、またはURL for and)を処理するときは常にそれを使用し、SafeStyles例外SafeUriなく、解析UriUtilsのためにブラウザーに供給される部分からHTML / CSS/URLをより正確に構築します。

実際、私たちは最近Element.setInnerHtml、他の同様のAPI(HasHTML)を廃止するかどうか()などを支持するかどうかについて話し合っていましElement.setInnerSafeHtmlた(HasSafeHtml)。

于 2012-10-23T09:58:47.937 に答える