Можем ли мы выполнить проверку вывода без проверки ввода в esapi?

String safeOutput = ESAPI.encoder().encodeForHTML(request.getParameter("temp"));

Выше не работает, не проверяет. (Вставил все необходимые банки и импортировал все файлы). Итак, можем ли мы напрямую использовать проверку вывода?


person ManthanB    schedule 04.05.2015    source источник
comment
Какое сообщение об ошибке вы получаете? Как это не подтверждается?   -  person gustafc    schedule 04.05.2015


Ответы (2)


Проверить ввод

Я бы использовал аннотацию @SafeHtml Hibernate Validator:

class MyEntity {

  @SafeHtml
  private String title;
  ...
}

Не кодируйте ввод, подтвердите его. Вы хотите предотвратить XSS или возможный XSS в своей базе данных.

Вы можете проверить ввод в своих контроллерах и/или репозиториях.

Кодировать вывод

Используйте проект OWASP Java Encoder. В JSP вы можете сделать:

<e:forHtml value="${attr}" />

person Neil McGuigan    schedule 04.05.2015
comment
Есть ли для этого спецификация JPA или она уникальна для Hibernate? - person avgvstvs; 04.05.2015
comment
Hibernate Validator является эталонной реализацией Bean Validation 1.1. - person Neil McGuigan; 04.05.2015

Вставленный вами код не является проверочным кодом. Это экранирование вывода. Если вы хотите проверить часть кода, вам нужно использовать один из многих ESAPI.validator().getValidInput() методов, которые работают в сочетании с validation.properties.

Кроме того, если ваша идея состоит в том, чтобы выполнять проверку на выходе, НЕ делайте этого. В принципе, это означает, что вы принимаете вредоносные данные в приложении, а затем проверяете их на зло только при выводе. Во-первых, не допускайте его попадания в ваше приложение! Скрыть вывод. Всегда экранируйте вывод в соответствии с контекстом!

В этом ответе приведены четыре примера того, как думать об экранировании вывода - не забывайте о своих контекстах!!!! И принятый ответ также поможет вам найти более полное решение для обработки XSS помимо этого.

person avgvstvs    schedule 04.05.2015