2012-01-01 27 views
1

以下の行は私のアプリケーションで検証をパスしていません。エラーが... NetBeansでHTMLが検証をパスしない

Bad value " /content/edit" for attribute href on element "a": WHITESPACE in PATH

<a href="<%=request.getAttribute("urlPrefix")%>/content/edit">Add Content</a> 

されているランタイムエラーは、次のとおりです。

org.apache.jasper.JasperException: /base.jsp(9,25) PWC6213: quote symbol expected

私はこの値の属性を渡しています。なぜ値を渡すとこのエラーが発生するのですか?

答えて

1

JSPでスクリプトレットを使用しないでください。 JSP ELを使用してください:

<a href="${urlPrefix}/content/edit">Add Content</a> 
+0

しかし、[XSS攻撃](https://www.owasp.org/index.php/Top_10_2010-A2-Cross-Site_Scripting_(XSS))から保護することを忘れないでください。 – Asaph

+0

@Asaph:同意しましたが、このソリューションにはどのように特有のものがありますか?他のすべての提案は、私のものと同じくらい安全です(または安全ではありません)。それはすべてurlPrefixにあるものとどこから来るかによって異なります。 –

+0

あなたの答えを具体的に選んで申し訳ありませんが、私はそれが言及する価値があると思いました。私は他の答えにコメントを残すことができたかもしれません(しかし、それを他の回答に残そうとはしませんでした)。私は通常、付随するXSSとSQLインジェクションを私が見るごとに指摘します。私は意識を高めることは価値があると思います。それはウェブをより安全な場所にします。 – Asaph

0
<a href="<%=request.getAttribute('urlPrefix')%>/content/edit">Add Content</a> 

urlPrefixで一重引用符を使用してください。それは動作するはずです。

+0

私はそれを疑います。これはスクリプトであり、el式ではありません。 – Asaph

+0

Asaphと合意してください、それは書き込まれるべきですAdd Content

0

このお試しください:この

<% String urlPrefix = (String)request.getAttribute("urlPrefix"); %> 
<a href="<%=urlPrefix%>/content/edit">Add Content</a> 

以上を:

<% 
String urlPrefix = (String)request.getAttribute("urlPrefix"); 
String url = urlPrefix + "/content/edit"; 
%> 
<a href="<%=url%>">Add Content</a> 

またはより良いELを使用します。Asaphがで指摘したように

<a href="${urlPrefix}/content/edit">Add Content</a> 

それはXSS attacksに対する保護を言及する価値があります彼のコメント:

あなたのJSPの先頭に

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

が含まれている場合は

<a href="${fn:escapeXml(urlPrefix)}/content/edit">Add Content</a> 

は、トリックを行う可能性があります。

+1

最後のものはJSTLを使用しません。 JSP ELを使用します。また、paramは要求属性にアクセスするのに使用され、要求属性には使用されません。 $ {urlPrefix}で十分です。 –

+0

@JBNizet - 私の悪い、訂正していただきありがとうございます。それに応じて答えを編集しました。 –

+0

@Murat:XSSから守るためにあなたに拍手を送るが、 'fn:escapeXml()'は 'href'属性であなたを保護しないだろう。 'urlPrefix'に' javascript:alert( 'あなたはとてもXSSされています!')という値が入っているとします。 // '。 xmlエンコーディングはコロン文字に何もしないので、ブラウザで実行されるjavascriptはすべてブラウザで実行されます。正しいアプローチは、 'urlPrefix'が与えられたコンテキスト内の有効なURLプレフィックスであることを検証することです。ホワイトリストの検証が理想的です。 [OWASP XSSチートシート](https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet)を参照してください。 – Asaph

0

私は簡単なテストを行ってきたし、次の行には何の構文エラーを持っていないとurlPrefix属性が設定されているかどうか、例外をスローせずに実行します:

<a href="<%=request.getAttribute("urlPrefix")%>/content/edit">Add Content</a> 

構文エラーはまったくありません。そこにはurlPrefix属性が設定されていないという場合には、結果のHTMLは次のとおりです。urlPrefixの場合はhttp://example.comに等しいで

<a href="null/content/edit">Add Content</a> 

、結果のHTMLは次のようになります。ここでは

<a href="http://example.com/content/edit">Add Content</a> 

が速い少しあります実証するためのスタンドアロン test.jspファイル:

<% request.setAttribute("urlPrefix", "http://example.com"); %> 
<a href="<%=request.getAttribute("urlPrefix")%>/content/edit">Add Content</a> 

あなたはをテストするための最初の行を削除することができますケース。

あなたが申し立てられた違反行として投稿した行は、実際問題ではないことが実証されています。いくつかの可能性:

  1. 正しい行が表示されていますか?
  2. 正しいファイルが表示されていますか?
  3. アプリケーションを展開してもよろしいですか?
  4. あなたは正しいURL /環境を確認していますか?
関連する問題