Обновление: материал 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 JSESSIONID, вам необходимо расширить этот код, чтобы установить все файлы cookie в фильтре. Это не очень хорошее решение в случае использования нескольких файлов cookie, но, возможно, это приемлемое быстрое исправление для установки только JSESSIONID.
Обратите внимание, что по мере развития вашего кода вас ждет неприятная скрытая ошибка, когда вы забудете об этом фильтре и попытаетесь установить другой файл cookie где-нибудь еще в вашем коде. Конечно, это не будет установлено.
Хотя это действительно взлом. Если вы используете Tomcat и можете скомпилировать его, взгляните на замечательное предложение Shabaz по исправлению поддержки HttpOnly в Tomcat.