34

Web アプリの JSP ファイルに次のコード行があると、エラーが発生します。

<jsp:setProperty name="db" property="userName" value="<%=request.getParameter("userName")%>"/>

私が得るエラーメッセージは次のとおりです。

org.apache.jasper.JasperException: /loginbean.jsp(6,59) 属性値 request.getParameter("userName") は " で引用されており、値内で使用する場合はエスケープする必要があります

私がいくつかのサイトで読んだのは、'(一重引用符) や(二重引用符) などの文字を使用する場合は、エスケープ シーケンス (バックスラッシュ)"を前に付ける必要があるということです。\

ただし、二重引用符 (userName という単語を囲む) の前にバックスラッシュを付けようとすると、すぐに次のエラーが表示されます - "Illegal Character \92- Unclosed String Literal"

この問題を解決するにはどうすればよいですか?

4

7 に答える 7

53

valueパラメータには一重引用符を使用する必要があります。つまり、次のようになります。

value='<%=request.getParameter("userName")%>'

または、ここで説明されているようにorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPINGパラメーターを設定します。false

http://blogs.sourceallies.com/2009/10/strict-quote-escaping-in-tomcat/

于 2011-06-28T03:43:34.923 に答える
12

Tomcat 8.5 以降を使用している場合、プロパティorg.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false は認識されません。

ブロック{TOMCAT_ROOT}/conf/web.xml内に以下を追加することで、プロパティを正常に設定できました。<servlet>

<init-param>
    <param-name>strictQuoteEscaping</param-name>
    <param-value>false</param-value>
</init-param>
于 2016-09-20T18:37:07.693 に答える
9

JSP を変更したくない場合は、次のように設定します。

org.apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false

あなたの{TOMCAT_ROOT}/conf/catalina.propertiesファイルに。魔法のように動作します!

ここから称賛。

于 2014-07-16T17:14:35.170 に答える
6

これは、IDE Regexp Replace で修正できます。

(<\w+:(?:[^>]|<%=[^%]+%>)+=)"([^<"]*<%=[^%]*"[^%]*%>[^"]*)"

置換テキストには、次のように入力します。

$1'$2'

于 2011-12-07T13:57:39.240 に答える
1

The example looks like a XSS example! This is a security vulnerability. I suggest to put in place a html encoding library like c:out tag or http://owasp-esapi-java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html#encodeForHTMLAttribute%28java.lang.String%29

I also suggest to take the userName from an authenticated session and not form the request param if possible (unless this is a login/registration form only!)

于 2014-07-17T08:51:03.117 に答える
0

プロジェクトのビルド中に Jasper JSP 検証フェーズが使用される場合があります。

Tomcat 8 以降、Ant タスク用の新しい属性strictQuoteEscapingと、コマンド ラインからorg.apache.jasper.JspCを実行するためのスイッチ-no-strictQuoteEscapingがあります。

于 2017-05-16T21:44:24.080 に答える