Подтвердить что ты не робот

Как лучше всего санировать вход в Java webapp

Мы используем jsp, сервлеты, beans с базой данных mysql. Мы не хотим ограничивать символы, введенные пользователями в полях формы. Итак, как мне очистить вход и как убедиться, что выход не изменен для вредоносных действий. Есть ли способ при отправке вывода, я мог проверить, был ли отправлен дополнительный код. Предположим, что есть поле ввода поиска - пользователь дает что-то вроде <script>alert("I am here")</script>. Возможно, я знаю, что это html-тег. Если пользователь добавляет дополнительный параметр в поле ссылки, это похоже на проверку до и после проверки, которую я мог бы сделать для документа, чтобы понять, что есть дополнительное поле ссылки.

4b9b3361

Ответ 1

Вы действительно должны позволить пользователям вводить как можно меньше HTML и/или javascript. Одним из хороших решений для проверки и дезинфекции этого материала является использование готовой библиотеки, например OWASP AntiSamy.

Кроме того, ознакомьтесь с API OWASP Enterprise Security для набора методов безопасности, которые разработчику необходимо создать безопасное веб-приложение.

Ответ 2

Вы всегда должны выполнять базовое HTML-экранирование данных, взятых из таких источников, как пользовательский ввод или база данных, которые могут содержать недопустимые символы. Тег <c:out> JSP делает это, например. Таким образом, если пользователь вводит "<script> ..." в поле и вы его распечатываете снова, он будет напечатан в HTML как "&lt;script&gt; ...".

Ответ 3

Дайте jsoup, чтобы помочь вам в этом. Что бы вы ни делали, не пытайтесь взломать это с помощью регулярного выражения или чего-то еще, потому что тогда у вас будет 2 проблемы.: -)

С jsoup все, что вам нужно, это короткий фрагмент кода:

String safe = Jsoup.clean(unsafe, Whitelist.basic());

Вы можете добавить теги и атрибуты в Whitelist довольно легко, хотя я нашел, что он не поддерживает теги пространства имен.