Как Вы настраиваете cookie HttpOnly у кота / веб-приложения Java?

Что вы не понимаете, так это то, что ничего о CGColorGetComponents не делает никаких претензий или гарантий относительно , сколько компонентов есть или , что означает . Информация о содержится в цветовом пространстве цвета. Если вы посмотрите на цветовое пространство белого и черного цветов, вы увидите, что они представляют собой две формы серого:

let sp = CGColorGetColorSpace(UIColor.whiteColor().CGColor)
println(sp) // kCGColorSpaceDeviceGrey

Таким образом, они выражаются только в значениях two : количество серых и альфа.

Следовательно, белый - [1.0,1.0] - который, если вы игнорируете лишние два числа, которые вы не должны были читать в первую очередь, это именно то, что вы получили.

Точно так же черный [0.0,1.0], что также и то, что вы получили.

72
задан Cheekysoft 31 August 2008 в 14:52
поделиться

5 ответов

httpOnly поддерживается в Tomcat 6.0.19 и Tomcat 5.5.28.

См. Запись в журнале изменений об ошибке 44382.

Последний комментарий об ошибке 44382 гласит: «Это было применено к 5.5.x и будет включено в 5.5.28 и новее». Однако похоже, что версия 5.5.28 не была выпущена.

Функциональность httpOnly можно включить для всех веб-приложений в conf / context.xml :

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

Я считаю, что это также работает для индивидуальный контекст, установив его в желаемой записи Context в conf / server.xml (таким же образом, как указано выше).

62
ответ дан 24 November 2019 в 12:42
поделиться

Обновление: материал JSESSIONID здесь только для более старых контейнеров. Используйте в настоящее время принимаемый ответ jt, если Вы не используете < Tomcat 6.0.19 или < Tomcat 5.5.28 или другой контейнер, который не поддерживает cookie HttpOnly JSESSIONID как опцию конфигурации.

При установке 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.

19
ответ дан Cheekysoft 7 November 2019 в 08:31
поделиться

Для сеансовых куки это, кажется еще, не поддерживается в Tomcat. См. отчет об ошибках Потребность добавить поддержку параметра сеансовых куки HTTPOnly . Несколько включенное обходное решение на данный момент может быть найдено здесь , который в основном сводится к ручному исправлению 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);
}
10
ответ дан Shabaz 7 November 2019 в 08:31
поделиться

Будьте осторожны, чтобы не перезаписать флаг cookie "; secure" в 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);
    }
}
14
ответ дан 24 November 2019 в 12:42
поделиться

также следует отметить, что включение HttpOnly нарушит работу апплетов, которым требуется доступ с отслеживанием состояния, обратно к jvm.

HTTP-запросы апплета не будут использовать cookie jsessionid и могут быть назначены другому коту.

2
ответ дан 24 November 2019 в 12:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: