2012-01-01 2 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

Согласитесь с Асафом, это должно быть написано 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:

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

Стоит отметить защиту от XSS attacks, как Asaph указано в его комментарий:

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

может сделать трюк, если вы включите

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

в верхней части JSP.

+1

Последнее не использует JSTL. Он использует JSP EL. Параметр используется для доступа к параметрам запроса, а не к атрибутам запроса. $ {urlPrefix} достаточно. –

+0

@JBNizet - Плохо, спасибо за исправление. Соответственно отредактировал ответ. –

+0

@Murat: Я приветствую вас за _trying_ для защиты от XSS, но 'fn: escapeXml()' не будет защищать вас в атрибуте 'href'. Представьте, что 'urlPrefix' содержит значение' javascript: alert ('вы так XSSed!'); // '. Кодировка xml ничего не делает для символа двоеточия, и поэтому любой javascript появляется после того, как он будет выполнен браузером. Правильный подход заключается в проверке того, что 'urlPrefix' является допустимым префиксом url в данном контексте. Валидация белого списка была бы идеальной. См. [OWASP XSS Cheat Sheet] (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 является:

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

В случае urlPrefix равен http://example.com, полученный 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> 

Вы можете удалить первую строку, чтобы проверить null кейс.

Итак, мы продемонстрировали, что линия, которую вы опубликовали как предполагаемую оскорбительную линию, на самом деле не проблематична. Некоторые возможности:

  1. Вы уверены, что искали подходящую строку?
  2. Вы уверены, что искали правильный файл?
  3. Вы уверены, что используете эту программу?
  4. Вы уверены, что ищете правильный URL-адрес/среду?
Смежные вопросы