2014-06-09 6 views
9

Я бегу Apache 2.2.26:Добавить Безопасные и HTTPOnly Флаги на каждый ответ Set-Cookie в Apache HTTPd

Server version: Apache/2.2.26 (Unix) 
Server built: Jan 17 2014 12:24:49 
Cpanel::Easy::Apache v3.22.30 rev9999 +cloudlinux 

Я пытаюсь использовать mod_headers редактировать заголовки Set-Cookie и добавить безопасный или httpOnly, но он вообще не работает (ничего не делает, не дает HTTP 500 ошибки).

Я могу использовать «изменить» «append», директивы команды Header без проблем, а не редактировать. Я не знаю, почему ...

Я пробовал много комбинаций, но это то, что у меня в .htaccess:

Header edit Set-Cookie "(.)([Hh][Tt][Tt][Pp][Oo][Nn][Ll][Yy])?(.)" "$1$2 ;HTTPOnly" 
Header edit Set-Cookie "(.)([Ss][Ee][Cc][Uu][Rr][Ee])?(.)" "$1$2 ;Secure" 

Я открыт для любого решения, которое будет автоматически добавлять флаги для каждого ответа Set-Cookie, не требуя редактирования кода в приложении. У меня нет доступа к установке дополнительных элементов на веб-сервере, но у веб-сервера есть стандартный очень длинный список модулей Apache, найденный на большинстве веб-хостов.

+0

Я * мог * нашел ответ, но я не совсем уверен, что они говорят: http://apache-http-server.18135.x6.nabble.com/Mark-cookies-as -secure-td5003557.html PHP-файл создает файл cookie, который может быть настроен как CGI, я не уверен. – Doug

+0

http://serverfault.com/questions/235713/apache-mod-header-rule-to-change-all-cookies-to-secure? –

+0

Я видел это, но проблема была в Apache 2.2.3, а в 2.2.4 было добавлено редактирование. Я запускаю Apache 2.2.26 ... поэтому, если есть способ для редактирования, я бы подумал, что он будет там. Полагаю, может быть, это старая версия mod_headers, а не старая версия Apache? Мне придется это сделать. – Doug

ответ

20

директива Header edit работает перед тем приложение производит ответ, поэтому если приложение производит заголовок, который вы хотите изменить, что заголовок не будет еще существовать в момент выполнения директивы, и там ничего не будет для его редактирования.

Вы можете исправить это с помощью Header always edit (который работает после ваше приложение производит ответ) вместо:

Header always edit Set-Cookie (.*) "$1; HTTPOnly" 

В качестве примера заголовок, перед применением директивы:

Set-Cookie: foo=bar; domain=.example.com; path=/ 

То же после применения директивы:

Set-Cookie: foo=bar; domain=.example.com; path=/; HTTPOnly 

Я не уверен, какие директивы в вашем вопросе предназначены именно для этого; что они на самом деле результат при изменении на Header always edit (при условии, что тот же заголовок Set-Cookie, как в моем примере выше) является, например,

Set-Cookie: f ;HTTPOnlyo=bar; domain=.example.com; path=/ 

Если вы понимаете, как регулярные выражения и обратные_связи работы, это очевидно, что там происходит, но по-видимому, это не то, что вы хотите. Директива, которую я дал в начале этого ответа, должна работать для вас, если, как вы говорите, вы хотите добавить флаг в каждый заголовок Set-Cookie; если ваши потребности более сложны, и я неправильно понял, что вы пытаетесь сделать с этим поиском/заменой, сообщите мне.

EDIT: В случае это не очевидно: добавить как флаги, вы можете либо изменить директиву следующим образом:

Header always edit Set-Cookie (.*) "$1; HTTPOnly; Secure" 

... или использовать две директивы:

Header always edit Set-Cookie (.*) "$1; HTTPOnly" 
Header always edit Set-Cookie (.*) "$1; Secure" 

Первый подход кажется более разумным для меня, но это в значительной степени вопрос вкуса.

+0

Спасибо! Я проверил это и заставил его работать. Я знал, что это должно быть что-то простое! Кстати, причина, по которой у меня было две строки, заключалась в том, чтобы не добавлять httpOnly или не защищать, если флаг уже существует без еще более сложного RegEx. В любом случае, я могу справиться с этими корректировками. – Doug

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

  • Нет связанных вопросов^_^