String safeOutput = ESAPI.encoder().encodeForHTML(request.getParameter("temp"));
Выше не работает, не проверяет. (Вставил все необходимые банки и импортировал все файлы). Итак, можем ли мы напрямую использовать проверку вывода?
String safeOutput = ESAPI.encoder().encodeForHTML(request.getParameter("temp"));
Выше не работает, не проверяет. (Вставил все необходимые банки и импортировал все файлы). Итак, можем ли мы напрямую использовать проверку вывода?
Проверить ввод
Я бы использовал аннотацию @SafeHtml
Hibernate Validator:
class MyEntity {
@SafeHtml
private String title;
...
}
Не кодируйте ввод, подтвердите его. Вы хотите предотвратить XSS или возможный XSS в своей базе данных.
Вы можете проверить ввод в своих контроллерах и/или репозиториях.
Кодировать вывод
Используйте проект OWASP Java Encoder. В JSP вы можете сделать:
<e:forHtml value="${attr}" />
Вставленный вами код не является проверочным кодом. Это экранирование вывода. Если вы хотите проверить часть кода, вам нужно использовать один из многих ESAPI.validator().getValidInput()
методов, которые работают в сочетании с validation.properties.
Кроме того, если ваша идея состоит в том, чтобы выполнять проверку на выходе, НЕ делайте этого. В принципе, это означает, что вы принимаете вредоносные данные в приложении, а затем проверяете их на зло только при выводе. Во-первых, не допускайте его попадания в ваше приложение! Скрыть вывод. Всегда экранируйте вывод в соответствии с контекстом!
В этом ответе приведены четыре примера того, как думать об экранировании вывода - не забывайте о своих контекстах!!!! И принятый ответ также поможет вам найти более полное решение для обработки XSS помимо этого.