5

У меня есть настройки моего приложения ColdFusion, чтобы установить HTTPOnly печенье, используя приведенный ниже код (от http://www.petefreitag.com/item/764.cfm):Почему HTTPOnly Cookies неправильно настроены в IE9?

<cfcomponent output="false"> 
    <cfscript> 
     THIS.Name = "MyCFApp"; 
     THIS.SessionManagement = true; 
     THIS.SetClientCookies = false; 
     THIS.SessionTimeout = CreateTimeSpan(0, 3, 0, 0); 
     THIS.ApplicationTimeout = CreateTimeSpan(0, 8, 0, 0); 
    </cfscript> 

    <cffunction name="onSessionStart" returntype="Void" output="false"> 
     <cfheader 
      name="Set-Cookie" 
      value="CFID=#SESSION.CFID#;path=/;HTTPOnly;#APPLICATION.SECURE_COOKIES#;" /> 
     <cfheader 
      name="Set-Cookie" 
      value="CFTOKEN=#SESSION.CFTOKEN#;path=/;HTTPOnly;#APPLICATION.SECURE_COOKIES#;" /> 

     <cfreturn /> 
    </cffunction> 
</cfcomponent> 

(FYI, APPLICATION.SECURE_COOKIES позволяет мне установить значение отдельного приложения для защищенных куки - производство SSL, так Я могу сделать безопасным, но моя локальная среда для разработчиков - это не SSL, поэтому это пусто.)

Когда я очищаю свои файлы cookie/сеанс в Google Chrome и перезагружаю страницу, я могу видеть заголовки ответа Set-Cookie в отладчике :

Google Chrome Debugger - Headers

Когда я проверить печенье в отладчике, они помечаются как HTTPOnly:

Google Chrome Debugger - Cookies

Когда я делаю то же самое в IE9, я могу видеть Set-Cookie заголовки в отладчике:

IE9 - Headers

Но для того же запроса, куки будут видны в отладчике:

IE9 - Cookies

Когда я перезагружать в IE9, печенье видны, но не помечена как HTTPOnly:

enter image description here

Что происходит здесь с IE9? Как я могу разрешить это, чтобы правильно установить HTTPOnly Cookies?

+0

Я считаю, что были проблемы с Дев инструменты не в состоянии показать HTTPOnly печенье в IE8. В основном версия 8 не показывала их, потому что они не были доступны клиенту (HTTPOnly). Однако это должно быть разрешено в IE9. Насколько вы видите файлы cookie после перезагрузки IE9, это потому, что он показывает вам файлы cookie, которые ваш браузер отправил обратно на сервер. Обратите внимание на _Sent_ в столбце «Направление» скриншота, который вы включили. Также почему он не показывает HTTPOnly. –

+0

@ Miguel-F Итак, как я могу подтвердить, что мой сервер устанавливает HTTPOnly-файлы cookie в IE? –

+0

Я считаю, что ответ в заголовках. Если вы посмотрите на скриншот, который вы поделили с IE9 с заголовками ответов, в конце обеих строк _Set-Cookie_ вы можете увидеть флаг HTTPOnly. Это показывает, что сервер отправил его в браузер. Именно браузер должен уважать (или нет) этот флаг. Я думаю, что вы просто имеете дело с «работающей как спроектированная» проблема со старой версией IE. –

ответ

3

повышен с комментариями

Я считаю, что была проблема с инструментами разработчика в IE8, которые не будут отображать печенье с флагом HTTPOnly. Это все еще может быть проблемой с IE9, но я не смог подтвердить это.

Когда я перезагружать в IE9, печенье видны, но не помечена как HTTPOnly:

enter image description here

Куки, что вы видите в инструментах разработчика после перезагрузки IE9 Поступают отправил вашим браузером на сервер. Обратите внимание на Отправлено в колонке «Направление» на снимке экрана. Именно поэтому он не отображает флаг HTTPOnly как отправленный. Он не имеет никакого значения для сервера. В столбце «Направление» будет отображаться Получено для файлов cookie, отправленных с сервера.

Как я могу подтвердить, что мой сервер устанавливает HTTPOnly-файлы cookie в IE?

enter image description here

Если вы посмотрите на скриншот, что вы поделились с IE9, показывая заголовки ответа, в конце обеих линий Set-Cookie можно увидеть флаг HTTPOnly. Это показывает, что сервер отправил его в браузер. Именно браузер должен уважать (или нет) этот флаг. Я боюсь, что вы имеете дело с проблемой «работы с дизайном» с инструментами разработчика на старой версии Internet Explorer. ПРИМЕЧАНИЕ. Это только проблема с инструментами разработчика, а не поддержка браузером флага HTTPOnly.

Один простой способ проверить, соблюдает ли браузер ваш флаг HTTPOnly, - ввести следующее в адресную строку.

javascript:alert(document.cookie) 

Это отобразит окно со всеми файлами cookie, доступными в настоящее время для javascript. Любые файлы cookie с флагом HTTPOnly должны отображать NOT.


Вот одна ссылка, что я нашел - View HttpOnly session cookies in Internet Explorer

Смежные вопросы