Java HTML未通过验证

Java HTML未通过验证,java,java-ee-6,Java,Java Ee 6,下一行未通过我的应用程序中的验证。Netbeans中的错误是 元素“a”上的属性href的错误值“/content/edit”:路径中的空白 <a href="<%=request.getAttribute("urlPrefix")%>/content/edit">Add Content</a> 运行时错误为: org.apache.jasper.JasperException:/base.jsp(9,25)PWC6213:预期的引号符号 我正在

下一行未通过我的应用程序中的验证。Netbeans中的错误是

元素“a”上的属性href的
错误值“/content/edit”:路径中的空白

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

运行时错误为:

org.apache.jasper.JasperException:/base.jsp(9,25)PWC6213:预期的引号符号

我正在传递此值的属性。为什么传递值时会出现此错误?


<a href="<%=request.getAttribute('urlPrefix')%>/content/edit">Add Content</a>
使用带有
urlpeffix
的单引号。它应该可以工作。


使用带有
urlpeffix
的单引号。它应该可以工作。

试试这个:

<% 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:

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

值得一提的是,正如他在评论中指出的:

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

如果你包括

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

在JSP的顶部。

尝试以下操作:

<% 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:

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

值得一提的是,正如他在评论中指出的:

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

如果你包括

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


在JSP的顶部。

不要在JSP中使用scriptlet。使用JSP EL:

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

不要在JSP中使用scriptlet。使用JSP EL:

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

我刚刚做了一个简单的测试,下面这行没有语法错误,无论是否设置了
urlPrefix
属性,都不会抛出异常:

<a href="<%=request.getAttribute("urlPrefix")%>/content/edit">Add Content</a>
如果
urlpeffix
等于
http://example.com
,生成的html为:

<a href="null/content/edit">Add Content</a>
<a href="http://example.com/content/edit">Add Content</a>
您可以删除第一行以测试
null
案例

因此,我们已经证明,你所发布的所谓冒犯性信息实际上并没有问题。一些可能性:

  • 你确定你看的是正确的线吗
  • 您确定正在查看正确的文件吗
  • 您确定已部署应用程序吗
  • 您确定正在查看正确的url/环境吗

  • 我刚刚做了一个简单的测试,下面的一行没有语法错误,无论是否设置了
    urlpefix
    属性,都不会抛出异常:

    <a href="<%=request.getAttribute("urlPrefix")%>/content/edit">Add Content</a>
    
    如果
    urlpeffix
    等于
    http://example.com
    ,生成的html为:

    <a href="null/content/edit">Add Content</a>
    
    <a href="http://example.com/content/edit">Add Content</a>
    
    您可以删除第一行以测试
    null
    案例

    因此,我们已经证明,你所发布的所谓冒犯性信息实际上并没有问题。一些可能性:

  • 你确定你看的是正确的线吗
  • 您确定正在查看正确的文件吗
  • 您确定已部署应用程序吗
  • 您确定正在查看正确的url/环境吗

  • 我对此表示怀疑。这是一个脚本,不是一个el表达。同意亚萨的观点,应该写出来,我怀疑。这是一个scriptlet,不是el表达式。同意Asph,应该编写它,但别忘了保护它。@Asph:同意,但它是如何针对此解决方案的?所有其他建议都和我的一样安全(或不安全)。这完全取决于URL前缀中的内容以及它的来源。很抱歉,我特别选择了你的答案,但我认为这值得一提。我想我可以在任何其他答案上留下这个评论(但我不想在所有其他答案上留下这个评论)。每当我看到XSS和SQL注入时,我通常会指出它。我认为提高认识是值得的。这让网络变得更安全。顺便说一句:你的答案并不是我留下评论的唯一答案。没有人幸免,因为我认为没有人真正回答这个问题。我刚刚补充了一些我认为会使事情朝着更有成效的方向发展。但别忘了防范。@Asaf:同意,但它是如何针对这个解决方案的呢?所有其他建议都和我的一样安全(或不安全)。这完全取决于URL前缀中的内容以及它的来源。很抱歉,我特别选择了你的答案,但我认为这值得一提。我想我可以在任何其他答案上留下这个评论(但我不想在所有其他答案上留下这个评论)。每当我看到XSS和SQL注入时,我通常会指出它。我认为提高认识是值得的。这让网络变得更安全。顺便说一句:你的答案并不是我留下评论的唯一答案。没有人幸免,因为我认为没有人真正回答这个问题。我刚刚添加了一个我认为可以使事情朝着更有成效的方向发展。最后一个没有使用JSTL。它使用jspel。param用于访问请求参数,而不是请求属性${urlpeffix}就足够了。@JBNizet-我的错,谢谢你的更正。相应地编辑了答案。@Murat:我为您尝试防范XSS而鼓掌,但
    fn:escapeXml()
    不会在
    href
    属性中保护您。假设
    urlpeffix
    包含值
    javascript:alert('yoursoxssed!')//。xml编码对冒号字符没有任何作用,因此浏览器将执行冒号字符之后出现的任何javascript。正确的方法是验证
    urlpefix
    在给定上下文中是否是有效的url前缀。白名单验证将是理想的。请参阅。最后一个不使用JSTL。它使用jspel。param用于访问请求参数,而不是请求属性${urlpeffix}就足够了。@JBNizet-我的错,谢谢你的更正。相应地编辑了答案。@Murat:我为您尝试防范XSS而鼓掌,但
    fn:escapeXml()
    不会在
    href
    属性中保护您。假设
    urlpeffix
    包含值
    javascript:alert('yoursoxssed!')//。xml编码对冒号字符没有任何作用,因此浏览器将执行冒号字符之后出现的任何javascript。正确的方法是验证