Как настроить cookie HttpOnly в tomcat / java webapps?
150435 просмотра
9 ответа
После прочтения сообщения Джеффа о защите ваших файлов cookie: HttpOnly . Я хотел бы реализовать HttpOnly cookies в своем веб-приложении.
Как вы говорите, что tomcat использует только HTTP-файлы cookie для сеансов?
Автор: ScArcher2 Источник Размещён: 17.05.2019 03:23Ответы (9)
61 плюса
httpOnly поддерживается как Tomcat 6.0.19 и Tomcat 5.5.28.
См. Запись в журнале изменений для ошибки 44382.
Последний комментарий к ошибке 44382 гласит: «это было применено к 5.5.x и будет включено в 5.5.28 и далее». Однако, похоже, что 5.5.28 выпущено.
Функцию httpOnly можно включить для всех webapps в conf / context.xml :
<Context useHttpOnly="true">
...
</Context>
Моя интерпретация заключается в том, что она также работает для отдельного контекста, устанавливая ее на нужную запись Контекста в conf / server.xml (таким же образом, как описано выше).
Автор: jt. Размещён: 06.07.2009 04:4619 плюса
Обновление: материал JSESSIONID здесь предназначен только для старых контейнеров. Используйте принятый ответ jt, если вы не используете
При настройке файлов cookie в приложении используйте
response.setHeader( "Set-Cookie", "name=value; HttpOnly");
Однако во многих веб-папках самым важным cookie является идентификатор сеанса, который автоматически устанавливается контейнером в качестве файла cookie JSESSIONID.
Если вы используете только этот файл cookie, вы можете написать ServletFilter, чтобы повторно установить файлы cookie на выходе, заставив JSESSIONID для HttpOnly. На странице http://keepitlocked.net/archive/2007/11/05/java-and-httponly.aspx http://alexsmolen.com/blog/?p=16 предлагается добавить в фильтр следующее.
if (response.containsHeader( "SET-COOKIE" )) {
String sessionid = request.getSession().getId();
response.setHeader( "SET-COOKIE", "JSESSIONID=" + sessionid
+ ";Path=/<whatever>; Secure; HttpOnly" );
}
но обратите внимание, что это перезапишет все файлы cookie и установит только то, что вы здесь указываете в этом фильтре.
Если вы используете дополнительные файлы cookie в файле cookie JSESSIONID, вам необходимо расширить этот код, чтобы установить все файлы cookie в фильтр. Это не является отличным решением в случае нескольких файлов cookie, но, возможно, является приемлемым быстродействием для настройки JSESSIONID.
Обратите внимание, что по мере развития вашего кода с течением времени появляется неприятная скрытая ошибка, ожидающая вас, когда вы забудете об этом фильтре и попытаетесь установить еще один файл cookie в другом месте вашего кода. Конечно, он не будет установлен.
Это действительно хак. Если вы используете Tomcat и можете его скомпилировать, взгляните на превосходное предложение Shabaz по исправлению поддержки HttpOnly в Tomcat.
Автор: Cheekysoft Размещён: 28.08.2008 09:3714 плюса
Пожалуйста, будьте осторожны, чтобы не перезаписывать флаг «secure» cookie в https-сессиях. Этот флаг предотвращает отправку браузера cookie через незашифрованное http-соединение, в основном предоставляя использование https для законных запросов бессмысленно.
private void rewriteCookieToHeader(HttpServletRequest request, HttpServletResponse response) {
if (response.containsHeader("SET-COOKIE")) {
String sessionid = request.getSession().getId();
String contextPath = request.getContextPath();
String secure = "";
if (request.isSecure()) {
secure = "; Secure";
}
response.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid
+ "; Path=" + contextPath + "; HttpOnly" + secure);
}
}
Автор: Hendrik Brummermann
Размещён: 23.09.2009 10:04
9 плюса
Для сессионных куки он пока не поддерживается в Tomcat. См. Отчет об ошибке. Необходимо добавить поддержку HTTPOnly параметра cookie сеанса . Несколько вовлечены работы вокруг теперь можно найти здесь , которая в основном сводится к тому, вручную заплат Tomcat. В настоящий момент я не могу найти простой способ сделать это, я боюсь.
Чтобы обобщить обход, он включает загрузку источника 5.5 и затем изменение источника в следующих местах:
org.apache.catalina.connector.Request.java
//this is what needs to be changed
//response.addCookieInternal(cookie);
//this is whats new
response.addCookieInternal(cookie, true);
}
org.apache.catalina.connectorResponse.addCookieInternal
public void addCookieInternal(final Cookie cookie) {
addCookieInternal(cookie, false);
}
public void addCookieInternal(final Cookie cookie, boolean HTTPOnly) {
if (isCommitted())
return;
final StringBuffer sb = new StringBuffer();
//web application code can receive a IllegalArgumentException
//from the appendCookieValue invokation
if (SecurityUtil.isPackageProtectionEnabled()) {
AccessController.doPrivileged(new PrivilegedAction() {
public Object run(){
ServerCookie.appendCookieValue
(sb, cookie.getVersion(), cookie.getName(),
cookie.getValue(), cookie.getPath(),
cookie.getDomain(), cookie.getComment(),
cookie.getMaxAge(), cookie.getSecure());
return null;
}
});
} else {
ServerCookie.appendCookieValue
(sb, cookie.getVersion(), cookie.getName(), cookie.getValue(),
cookie.getPath(), cookie.getDomain(), cookie.getComment(),
cookie.getMaxAge(), cookie.getSecure());
}
//of course, we really need to modify ServerCookie
//but this is the general idea
if (HTTPOnly) {
sb.append("; HttpOnly");
}
//if we reached here, no exception, cookie is valid
// the header name is Set-Cookie for both "old" and v.1 ( RFC2109 )
// RFC2965 is not supported by browsers and the Servlet spec
// asks for 2109.
addHeader("Set-Cookie", sb.toString());
cookies.add(cookie);
}
Автор: Shabaz
Размещён: 28.08.2008 09:36
7 плюса
Если ваш веб-сервер поддерживает спецификацию Serlvet 3.0, например tomcat 7.0+, вы можете использовать ниже web.xml
:
<session-config>
<cookie-config>
<http-only>true</http-only>
<secure>true</secure>
</cookie-config>
</session-config>
Как упоминалось в документах:
HttpOnly : Указывает, будут ли файлы cookie для отслеживания сеансов, созданные этим веб-приложением, отмечены как HttpOnly
Secure : указывает, будут ли файлы cookie отслеживания сеансов, созданные этим веб-приложением, помечены как безопасные, даже если запрос, инициировавший соответствующий сеанс, использует простой HTTP вместо HTTPS
Пожалуйста, посмотрите, как установить httponly и cookie сеанса для веб-приложения java
Автор: Alireza Fattahi Размещён: 23.06.2015 07:042 плюса
также следует отметить, что включение HttpOnly приведет к разрыву апплетов, которые требуют доступа с сохранением состояния к jvm.
HTTP-запросы апплета не будут использовать файл cookie jsessionid и могут быть назначены другому коте.
Автор: Pete Brumm Размещён: 18.08.2010 08:332 плюса
Для файлов cookie, которые я явно устанавливаю, я переключился на использование SimpleCookie, предоставленного Apache Shiro . Он не наследуется от javax.servlet.http.Cookie, поэтому требуется немного больше жонглирования, чтобы все работало правильно, но оно обеспечивает набор свойств HttpOnly и работает с Servlet 2.5.
Для установки cookie на ответ, а не на выполнение, response.addCookie(cookie)
вам нужно сделать cookie.saveTo(request, response)
.
0 плюса
В Tomcat6 вы можете условно включить свой класс HTTP Listener:
public void contextInitialized(ServletContextEvent event) {
if (Boolean.getBoolean("HTTP_ONLY_SESSION")) HttpOnlyConfig.enable(event);
}
Использование этого класса
import java.lang.reflect.Field;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import org.apache.catalina.core.StandardContext;
public class HttpOnlyConfig
{
public static void enable(ServletContextEvent event)
{
ServletContext servletContext = event.getServletContext();
Field f;
try
{ // WARNING TOMCAT6 SPECIFIC!!
f = servletContext.getClass().getDeclaredField("context");
f.setAccessible(true);
org.apache.catalina.core.ApplicationContext ac = (org.apache.catalina.core.ApplicationContext) f.get(servletContext);
f = ac.getClass().getDeclaredField("context");
f.setAccessible(true);
org.apache.catalina.core.StandardContext sc = (StandardContext) f.get(ac);
sc.setUseHttpOnly(true);
}
catch (Exception e)
{
System.err.print("HttpOnlyConfig cant enable");
e.printStackTrace();
}
}
}
Автор: Systemsplanet
Размещён: 08.12.2015 03:21
0 плюса
Я нашел в OWASP
<session-config>
<cookie-config>
<http-only>true</http-only>
</cookie-config>
</session-config>
это также исправление проблемы безопасности «httponlycookies in config»
Автор: Ravipati Praveen Размещён: 06.12.2018 01:00Вопросы из категории :
- java В чем разница между int и Integer в Java и C #?
- java Как я могу определить IP моего маршрутизатора / шлюза в Java?
- java Каков наилучший способ проверки XML-файла по сравнению с XSD-файлом?
- java Как округлить результат целочисленного деления?
- security Окончательное руководство по аутентификации на основе форм
- security Может ли кеш-сервер прокси-сервера SSL GET? Если нет, достаточно ли шифрования тела ответа?
- security Отключить функцию браузера «Сохранить пароль»
- security Как настроить cookie HttpOnly в tomcat / java webapps?
- cookies Как бы вы внедрили аутентификацию на основе FORM без резервной базы данных?
- cookies Как однозначно идентифицировать компьютеры, посещающие мой веб-сайт?
- cookies Мне нужно получить все куки из браузера
- xss XSS Blacklist - Кто-нибудь знает о разумном?
- xss Как я могу санировать ввод пользователя с помощью PHP?
- xss Лучший способ обеспечить безопасность и избежать XSS с помощью введенных пользователем URL
- httponly Установка HTTPONLY для классического файла cookie сеанса Asp
- httponly как установить httponly и сессионный cookie для веб-приложения Java
- httponly Отключить HttpOnly Spring boot