私が使用し、ディスプレイの種類ごとに文字列をエスケープするために、同様OWASP(ESAPI)ライブラリを使用します。
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(JSPを想定)
<tag attr="<%= html_attr %>" onclick="alert('<%= js %>')"><%= html %></tag>
更新()
ESAPIエンコーダは、legacy、より良い代替策が作成され、積極的に維持されているので、代わりにOWASP Java Encoderを使用することを強く推奨します。
プロジェクトですでにESAPI
が使用されている場合は、integrationが追加されました。このライブラリを使用してエンコードに使用できます。
使い方は自分wiki pageに説明したが、完成のために、これは文脈あなたのデータエンコードするためにあなたがそれを使用する方法である。
// 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を
<div data-attr="<%= htmlAttr %>" onclick="alert('<%= jsAttr %>')">
<%= html %>
</div>
(JSPを想定します)
PS:より多くの文脈が存在し、ライブラリによってサポートされています
'' - ''と '% - >(%XSSの場合、%34などの文字をエンコードする場合) –
@JoopEggen '%'を '&perc;'に置き換えるのがどのような場合に便利でしょうか? – Gumbo
@Gumbo '&perc;'は、XSSに対して実際にはあまり役に立ちませんが、URLを難読化できます。ブラウザはcharに対して%コードを使用しません。つまり、 ''はjavascriptを呼び出しません。 –