Символьная проблема при отображении результата запроса - PullRequest
0 голосов
/ 21 апреля 2010

Я не очень хорош в jsp, но мне было интересно, что может вызвать такую ​​проблему, когда все остальные строки отображаются хорошо:

файл JSP запрашивает информацию о людях по имени в Contact (MS Exchange). запрос возвращает полную информацию о человеке; и во-первых, фамилии напечатаны. Фамилии с апострофами (например, O'reilly) вообще не отображаются.

какие могут быть возможные решения?

Заранее спасибо

P.S. Я знаю, что способ запроса не подходит, но мне нужна информация от людей, у которых раньше была такая проблема.

1 Ответ

0 голосов
/ 21 апреля 2010

Вам нужно выполнить SQL-запрос с помощью PreparedStatement вместо Statement, иначе ваш SQL-запрос прервется (и будет подвержен SQL-инъекциям ). 1007 *

Представьте себе следующий запрос:

SELECT foo FROM tbl WHERE name = 'O'Reilly'

Это приведет к ошибке синтаксиса SQL. Вы бы видели это, если бы проверили логи сервера. Вы должны были видеть это на экране, когда использовали сервлет вместо JSP для выполнения этой задачи. С PreparedStatement запрос будет обработан следующим образом:

SELECT foo FROM tbl WHERE name = 'O\'Reilly'

Таким образом, SQL понимает этот запрос и может выполнить его без проблем.

С другой стороны, вам также нужно HTML-экранировать результаты, иначе он будет подвержен XSS-атакам .

Представьте себе следующий экран:

<input type='text' value='${name}'>

если ${name} равен O'Reilly, то HTML-код будет фактически иметь значение

<input type='text' value='O'Reilly'>

и вы увидите только O. Что будет, если имя будет '><script>alert('xss')</script><input type='text' value='? Чтобы исправить это, используйте JSTL fn:escapeXml для отображения ввода:

<input type='text' value='${fn:escapeXml(name)}'>

(кстати, более рекомендуется использовать двойные кавычки вместо одинарных кавычек, приведенный выше пример)

Тем не менее, технически вы также не должны делать это внутри файла JSP. Необработанный код Java принадлежит классу Java, а не файлу JSP. JSP - это технология просмотра, используйте ее только для просмотра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...