Мы используем jsp, сервлеты, beans с базой данных mysql. Мы не хотим ограничивать символы, введенные пользователями в полях формы. Итак, как мне очистить вход и как убедиться, что выход не изменен для вредоносных действий. Есть ли способ при отправке вывода, я мог проверить, был ли отправлен дополнительный код. Предположим, что есть поле ввода поиска - пользователь дает что-то вроде <script>alert("I am here")</script>
. Возможно, я знаю, что это html-тег. Если пользователь добавляет дополнительный параметр в поле ссылки, это похоже на проверку до и после проверки, которую я мог бы сделать для документа, чтобы понять, что есть дополнительное поле ссылки.
Как лучше всего санировать вход в Java webapp
Ответ 1
Вы действительно должны позволить пользователям вводить как можно меньше HTML и/или javascript. Одним из хороших решений для проверки и дезинфекции этого материала является использование готовой библиотеки, например OWASP AntiSamy.
Кроме того, ознакомьтесь с API OWASP Enterprise Security для набора методов безопасности, которые разработчику необходимо создать безопасное веб-приложение.
Ответ 2
Вы всегда должны выполнять базовое HTML-экранирование данных, взятых из таких источников, как пользовательский ввод или база данных, которые могут содержать недопустимые символы. Тег <c:out>
JSP делает это, например. Таким образом, если пользователь вводит "<script> ..."
в поле и вы его распечатываете снова, он будет напечатан в HTML как "<script> ..."
.
Ответ 3
Дайте jsoup
, чтобы помочь вам в этом. Что бы вы ни делали, не пытайтесь взломать это с помощью регулярного выражения или чего-то еще, потому что тогда у вас будет 2 проблемы.: -)
С jsoup
все, что вам нужно, это короткий фрагмент кода:
String safe = Jsoup.clean(unsafe, Whitelist.basic());
Вы можете добавить теги и атрибуты в Whitelist
довольно легко, хотя я нашел, что он не поддерживает теги пространства имен.