Недействительный итератор прошлого в C ++ 11

XSS можно предотвратить в JSP с помощью JSTL тега или fn:escapeXml() Функция EL, когда (повторно) управляемый вход. Сюда входят параметры запроса, заголовки, файлы cookie, URL, тело и т. Д. Все, что вы извлекаете из объекта запроса. Кроме того, пользовательский управляемый вход из предыдущих запросов, который хранится в базе данных, должен быть экранирован во время повторного отображения.

Например:

Это приведет к выходу символов, которые могут отобразили HTML, такие как <, >, ", ' и & в объекты HTML / XML , такие как <, >, ", ' и &.

Обратите внимание, что вам не нужно избегать их в коде Java (Servlet), так как они безвредны там. Некоторые могут отказаться от них во время обработки запроса (как вы это делаете в Servlet или Filter) вместо обработки response (как и в JSP), но таким образом вы можете рискнуть что данные без необходимости получают двойное экранирование (например, & становится &amp; вместо &, и в конечном итоге конечный пользователь увидит &) или что данные, хранящиеся в базе данных, становятся недоступными (например, при экспорте данных в JSON, CSV, XLS, PDF и т. Д., Которые вообще не требуют HTML-экранирования). Вы также потеряете социальный контроль, потому что вы больше не знаете, что пользователь действительно заполнил. Вы, как администратор сайта, действительно хотели бы знать, какие пользователи / IP-адреса пытаются выполнить XSS, чтобы вы могли легко отслеживать их и принять соответствующие меры. Эвакуация во время обработки запроса должна использоваться и использоваться только в качестве последнего курорта, когда вам действительно нужно как можно скорее исправить крушение поезда плохо разработанного старого веб-приложения в кратчайшие сроки. Тем не менее, вы должны в конечном счете переписать свои JSP-файлы, чтобы они стали XSS-безопасными.

Если вы хотите повторно отобразить управляемый пользователем ввод как HTML, в котором вы хотели бы разрешить только определенный поднабор HTML-тэгов, например , , и т. д., тогда вам нужно дезинформировать входные данные с помощью белого списка. Для этого можно использовать парсер HTML, например Jsoup . Но гораздо лучше ввести дружественный человеку язык разметки, такой как Markdown (также используемый здесь в Stack Overflow). Для этого вы можете использовать анализатор Markdown, например CommonMark . Он также встроил средства для очистки HTML. См. Также Я ищу Java-кодер Java .

Единственной проблемой на стороне сервера в отношении баз данных является предотвращение SQL injection . Вы должны убедиться, что вы никогда не связываете строки с пользовательским контролем прямо в запросе SQL или JPQL и что вы используете параметризованные запросы полностью. В терминах JDBC это означает, что вместо Statement вы должны использовать PreparedStatement . В терминах JPA используйте Query .


Альтернативой может быть переход из JSP / Servlet в Java MVC framework JSF . Он имеет встроенную поддержку XSS (и CSRF!) По всему месту. См. Также Предотвращение атаки CSRF, XSS и SQL Injection в JSF .

22
задан Community 23 May 2017 в 12:06
поделиться