Настройка httponly в файле cookie JSESSIONID (Java EE 5) - PullRequest
12 голосов
/ 07 июня 2010

Я пытаюсь установить флаг httponly в файле cookie JSESSIONID. Однако я работаю в Java EE 5 и не могу использовать setHttpOnly(). Сначала я попытался создать свой собственный файл cookie JSESSIONID из сервлета doPost(), используя response.setHeader().

Когда это не сработало, я попробовал response.addHeader(). Это тоже не сработало. Затем я узнал, что сервлет обрабатывает преобразование сеанса в файл cookie JSESSIONID и вставку его в заголовок http, поэтому, если я захочу поиграть с этим файлом cookie, мне придется написать фильтр. Я написал фильтр и поиграл с setHeader() / addHeader(), опять же безрезультатно.

Затем я узнал, что в объекте ответа происходит некоторое действие сброса / закрытия, прежде чем он попадет в фильтр, поэтому, если я хочу манипулировать данными, мне нужно расширить HttpServletResponseWrapper и передать его в filterChain.doFilter(). Это сделано, но я все еще не получаю результаты. Очевидно, что я делаю что-то не так, но я не знаю, что.

Я не уверен, относится ли это вообще к рассматриваемому вопросу, но сервлет не возвращает HTML-документ в браузер. Все, что на самом деле происходит, это то, что некоторые объекты заполняются и возвращаются в документ JSP. Я предположил, что объект Session превращается в файл cookie JSESSIONID и упаковывается вместе с объектами, добавленными в запрос, в заголовок http перед отправкой в ​​браузер.

Я был бы рад опубликовать некоторый код, но я хочу исключить вероятность того, что мои трудности возникнут из-за неправильного понимания теории.

Ответы [ 2 ]

10 голосов
/ 08 июня 2010

Поскольку cookie-файл JSESSIONID управляется контейнером сервлетов, этот параметр зависит от контейнера сервлетов.Неясно, какой из них вы используете, поэтому вот целевой ответ Apache Tomcat 6.0 , чтобы вы знали, в каком направлении вам придется искать свой сервлет-контейнер: вам нужно установить атрибут useHttpOnlyэлемент <Context> веб-приложения для true.

<Context useHttpOnly="true">
    ...
</Context>

Также см. эту документацию Tomcat об элементе <Context>.

5 голосов
/ 21 июня 2013

Вы можете использовать это с Java EE 5:

Для версий Java Enterprise Edition, предшествующих Java EE 6, обычным обходным решением является перезапись HTTP-заголовка ответа SET-COOKIE со значением cookie сеанса, который явно добавляет флаг HttpOnly:

String sessionid = request.getSession().getId();
// be careful overwriting: JSESSIONID may have been set with other flags
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly");

Источник: https://www.owasp.org/index.php/HttpOnly

Я проверяю это в фильтре

...