エラーが発生している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-閉じられていない文字列リテラル」
この問題を解決するにはどうすればよいですか?
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/
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>
JSPを変更したくない場合は、以下を設定するだけです。
org.Apache.jasper.compiler.Parser.STRICT_QUOTE_ESCAPING=false
あなたの{Tomcat_ROOT}/conf/catalina.properties
ファイル。魔法のように機能します!
称賛 ここから 。
これは、IDE Regexp Replace:
(<\w+:(?:[^>]|<%=[^%]+%>)+=)"([^<"]*<%=[^%]*"[^%]*%>[^"]*)"
置換テキストとして、次を入力します。
$ 1 '$ 2'
この例は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を取得し、可能であれば要求パラメーターを形成しないことをお勧めします(これがログイン/登録フォームのみである場合を除きます!)
プロジェクトのビルド中にJasper JSP検証フェーズが使用される場合。
Tomcat 8以降、Antタスクとスイッチ用の新しい属性 strictQuoteEscaping があります -no-strictQuoteEscaping 実行中 org.Apache.jasper.JspC からコマンドライン。
スクリプレットデリミタとして "を使用する場合、getParameterでプロパティデリミタとしていくつかを使用することはできません。したがって、スクリプトパラメータのデリミタを '。タグパラメータとして変更しても、問題はないと思います。
value = "<%= request.getParameter(" userName ")%>" />
沿って :
value = '<%= request.getParameter( "userName")%>' />