Tomcat 7 sessionid cookie отключает только http-и защищает
У меня есть веб-приложение, которое работает на сервере Tomcat 7. Файл cookie с идентификатором сеанса по умолчанию имеет флаги HttpOnly
и Secure
. Я хочу отключить эти флаги для cookie JSESSIONID
. Но это не сработает. Я изменил это в моем файле web.xml
, но он не работает.
<session-config>
<session-timeout>20160</session-timeout>
<cookie-config>
<http-only>false</http-only>
<secure>false</secure>
</cookie-config>
</session-config>
Я знаю, что это угроза безопасности, потому что злоумышленник может украсть файл cookie и захватить сессию, если он нашел xss vuln.
Файл cookie JSESSIONID
должен быть отправлен с HTTP и HTTPS и с запросами AJAX.
Edit:
Я успешно отключил флаг HttpOnly
, добавив следующий параметр в файл conf/context.xml
:
<Context useHttpOnly="false">
....
</Context>
Ответы
Ответ 1
Я не нашел в Tomcat решение, но если вы используете Apache в качестве обратного прокси, вы можете сделать:
Header edit* Set-Cookie "(JSESSIONID=.*)(; Secure)" "$1"
с mod_headers
, который выведет заголовок на обратном пути, чтобы удалить безопасный флаг. Не очень, но работает, если это важно.
Ответ 2
В дополнение к решению Джорджа Пауэлла выше для Apache, если вы работаете в IIS, вы можете решить его следующим образом:
- Установить модуль перезаписи URL-адреса IIS
- Добавьте в свой web.config следующее:
<rewrite>
<outboundRules>
<rule name="RemoveSecureJessionID">
<match serverVariable="RESPONSE_Set-Cookie" pattern="^(.*JSESSIONID.*)Secure;(.*)$" />
<action type="Rewrite" value="{R:1}{R:2}" />
</rule>
</outboundRules>
</rewrite>