Забанен 010 ServletResponse.setContentType () для замены ESAPI HTTPUtilities.setCurrentHTTP () - PullRequest
0 голосов
/ 22 марта 2020

Чтобы установить ServletResponse ContentType, вы можете, например, реализовать этот ServletResponse.setContentType ('text / plain') или ServletResponse.setContentType ('text / html') для HTML. Но этот оператор должен быть заменен использованием библиотеки ESAPI, такой как ESAPI.httpUtilities.setContentType (), для устранения потенциальной уязвимости. Согласно документу API org.ow asp .esapi (как я понял), HTTPUtilities интерфейса org.ow asp .esapi setContentType () не позволяет вам переключаться с «text / plain» на «text /». html 'программно. Есть ли пример ESAPI или учебное пособие, чтобы показать мне, как использовать ESAPI.httpUtilities.setCurrentHTTP () для программного изменения типа контента с 'text / plain' на 'text / html'?

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Чтобы сделать то, что вы хотите, вам нужно создать подкласс эталонной реализации DefaultHTTPUtilities, чтобы добавить метод setContentType (String headerValue). Затем вам необходимо настроить ESAPI для использования этого класса, изменив свойство ESAPI.HTTPUtilities в вашем классе ESAPI.properties, чтобы оно ссылалось на ваш пользовательский класс. Кроме того, вызов ESAPI.httpUtilities.setContentType (), вероятно, переоценен, если только вы не настроили интерфейс ESAPI Authenticator и не используете эту пользовательскую реализацию. (Эталонная реализация для него - просто игрушечный пример.) Затем вы должны вызвать Authenticator.login (), чтобы получить большую выгоду от вызова ESAPI.httpUtilities.setContentType (value). Конечно, вам придется изменить интерфейс HttpUtilities, чтобы добавить новый метод, который принимает значение заголовка. А есть ли приличная документация по этому поводу? Наверное, нет, по крайней мере, я не в курсе.

0 голосов
/ 23 марта 2020

Похоже, что ответ на этот вопрос - нет:

Эталонная реализация не допускает программный c доступ, она жестко запрограммирована:

https://github.com/ESAPI/esapi-java-legacy/blob/develop/sac/main/java/org/owasp/esapi/reference/DefaultHTTPUtilities.java

Метод "setContentType" запрограммирован только для извлечения значения свойства, определенного в esapi.properties:

Использование UTF-8 во всем вашем стеке настоятельно рекомендуется. Это включает в себя драйвер базы данных, контейнер и любые другие технологии, которые вы можете использовать. Невыполнение этого требования может привести к атакам с использованием транскодирования Unicode. Использование UTF-8 не мешает интернационализации. HttpUtilities.ResponseContentType = текст / HTML; charset = UTF-8

Если вы хотите добавить эту возможность, вы можете отправить запрос на внесение изменений со своими изменениями на github или написать свой собственный вариант для своей организации. Я не большой поклонник того, что первоначальные владельцы жестко закодировали это, но эта часть библиотеки была написана еще в 2007 году.

...