У меня есть веб-приложение Java / JSP, которое начало показывать ошибку после того, как я добавил fn:escapeXml()
в тег, который создает URL.
Исходный код был
<p id="provide-link">
Follow this link to see the source data:
<q:link href="../resources/source-data.jsp"
sourceData="${chart.parameters.source}">
Source Data
</q:link>
</p>
q:link
- это пользовательский тег, который создает гиперссылку из href
в качестве базы и sourceData
в качестве параметра GET. Например, если chart.parameters.source = 'dataset03'
, то ссылка, встроенная в страницу, является
../resources/source-data.jsp&sourceData=dataset03
.
Пользовательский тег q:link
записывается для обработки случаев, когда chart.parameters.source
представляет собой коллекцию нескольких источников данных, что является допустимым случаем.
Этот код работает нормально, но уязвим для атак вставки скриптов из-за параметра GET. Таким образом, я добавил функцию JSTL escapeXml()
в код, чтобы предотвратить это:
<p id="provide-link">
Follow this link to see the source data:
<q:link href="../resources/source-data.jsp"
sourceData="${fn:escapeXml(chart.parameters.source)}">
Source Data
</q:link>
</p>
Когда я это делаю, в URL добавляются квадратные скобки:
../resources/source-data.jsp&sourceData=[dataset03]
Это проблема, потому что [dataset03]
не является допустимым значением параметра.
Единственное, что я нашел в Интернете об этой проблеме, это этот вопрос , который не дает полного ответа, но предполагает, что ${fn:escapeXml(chart.parameters.source)}
может выводиться в виде массива теперь, когда он включает fn:escapeXml()
. Теория заключается в том, что q:link
затем перехватывает и сохраняет скобки массива при преобразовании в строку.
Кто-нибудь знает, что происходит и как это остановить?