web-dev-qa-db-ja.com

jspファイルでの二重引用符の使用による単純なエラー

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

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

表示されるエラーメッセージは次のとおりです。

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

一部のサイトで読んだことは、'(単一引用符)や"(二重引用符)のような文字には、エスケープシーケンス\(バックスラッシュ)を前に付ける必要があることです。中古。

ただし、二重引用符(Word userNameの前後)の前にバックスラッシュを追加しようとすると、すぐに次のエラーが表示されます-「不正な文字\ 92-閉じられていない文字列リテラル」

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

31
Arvind

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/

47
ryanprayogo

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>
6
Dump Cake

JSPを変更したくない場合は、以下を設定するだけです。

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

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

称賛 ここから

6
mppfiles

これは、IDE Regexp Replace:

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

置換テキストとして、次を入力します。

$ 1 '$ 2'

4
Stephan

この例はXSSの例のように見えます!これはセキュリティの脆弱性です。 c:outタグまたは http://owasp-esapi-Java.googlecode.com/svn/trunk_doc/latest/org/owasp/esapi/Encoder.html#のようなhtmlエンコーディングライブラリを配置することをお勧めしますencodeForHTMLAttribute%28Java.lang.String%29

また、認証されたセッションからuserNameを取得し、可能であれば要求パラメーターを形成しないことをお勧めします(これがログイン/登録フォームのみである場合を除きます!)

1
DavidC

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

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

0
Vadzim

スクリプレットデリミタとして "を使用する場合、getParameterでプロパティデリミタとしていくつかを使用することはできません。したがって、スクリプトパラメータのデリミタを '。タグパラメータとして変更しても、問題はないと思います。

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

沿って :

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

0
Salim Hamidi