21

この方法で JSP に文字列を表示します。

${someString}

もちろん、この文字列には特別な html 文字が含まれる場合があります。現在、悪意のあるコードを HTML に挿入することが可能です (たとえば、someString が javascript の場合は - を含めます<script src...>)。

印刷する前にすべての文字列がエスケープされていることを確認するにはどうすればよいですか?

Spring MVC と JSP を使用しています。

4

3 に答える 3

30

JSTLコアを使用できます:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:out value="${someString}"/>タグを使用して文字列を表示します。<c:out>クロスサイト スクリプティングを回避できるように HTML 文字をエスケープします。属性を設定することで指定できますescapeXml=truevalueもう 1 つの利点は、 が に評価された場合にデフォルト値を指定できることですnull

fn:escapeXml()EL機能も使えます。そのためのJSTL 関数を含める必要があります。

<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

別の可能な方法は、カスタムELResolverを構築することです。

EL式評価の変数およびプロパティ解決動作のカスタマイズを有効にします。

このブログでは、それを行う方法の実例を提供しています。


Spring MVC アプリ全体に対して、 web.xmlでエスケープを指定できます。

<context-param>
   <param-name>defaultHtmlEscape</param-name>
   <param-value>true</param-value>
</context-param>

springただし、エスケープは次のようなタグにのみ適用されます。

<form:input path="formField" htmlEscape="true" />

最後に、サードパーティ ライブラリXSSFilterを試すことができます。

于 2013-07-29T09:11:00.917 に答える
0

を使用してページレベルでこの動作を制御することもできます<spring:htmlEscape defaultHtmlEscape="true" />

于 2014-09-16T16:18:53.647 に答える
-1

JSP/Java では、次のコードを使用する必要があります。

JSP/HTML の場合:

<c:out value="TR tag </tr> Script Tag <script>alert("hello Rahul")</script>" escapeXml="true" />
于 2016-05-10T07:40:52.360 に答える