2016-10-04 106 views
1

JSPとSpringを使用するプロジェクトでは、JavaScriptのEL式の値を最初にエスケープし、次にHTMLをエスケープする最も簡単な方法は何でしょうか?JSPでは、最初にJavaScriptの文字列値をエスケープし、次にHTMLをエスケープする方法は?

は、この使用を想像:変数値は引用より少なくよりおよびその他の文字を含めることができますよう

<a onclick='alert("${note}");'>Foo</a> 

これは、XSSやプレーン構文エラーの影響を受けやすいです。私が思いついた何

は次のとおりです。

<a onclick='alert("<c:out value="${null}" 
><s:escapeBody htmlEscape="false" javaScriptEscape="true" 
>${variable}</s:escapeBody></c:out>");'>Foo</a> 
<!-- this escapes first the inner tags body for JS, 
    then c:out uses that (because its value attribute 
    is null, it uses what is in its own body) and 
    escapes it for HTML/XML --> 

むしろ不器用なので、私はもっとエレガントな方法を探しています。

(例えば、それはa"bの値に失敗するので、タグはHTMLのための最初のエスケープとしてだけ<s:escapeBody htmlEscape="true" javaScriptEscape="true">を使用することは間違っていることに注意して、JS用)

+0

はず重複してJSをエスケープについて質問@BalusC、ここで問題は、HTMLとJSについてです。ここの答えは、ここの答えの_part_として使用することができます。 –

答えて

0

不器用なコードを避けるために、私はあなたをお勧めしますそのための関数を提供する小さなカスタムのtaglibを作成します。 commons-langでStringEscapeUtilsを使用すると、それを簡単に実装できます。

次にあなたが書くことができます。

<a onclick='alert("${foo:escapeJsHtml(note)}");'>Foo</a> 
+0

_StringEscapeUtils_メソッド_escapeHtml3_(または4)は、アポストロフィー文字をエスケープしないので、ここでは壮観に失敗します。 –

+0

しかし、escapeEcmaScriptはそうです。 https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/org/apache/commons/lang3/StringEscapeUtils.html#escapeEcmaScript(java.lang.String) –

関連する問題