Добавить защищенные и httpOnly флаги для каждого ответа Set-Cookie в Apache httpd

Я запускаю Apache 2.2.26:

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 и добавления флага secure или 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, найденных на большинстве веб-хостов.

Ответ 1

Директива 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"

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

Ответ 2

Я пытался установить http, безопасный и samesite = строгий на куки.

Это сработало для меня:

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

Samesite = strict обеспечивает защиту против XSRF.

Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure;SameSite=strict

Надеюсь, поможет.

Ответ 3

убедитесь, что mod_headers.so включен, затем добавьте следующий заголовок в apache2.conf для системы на основе Debian или httpd.conf для системы на основе RPM

 Header edit Set-Cookie ^(.*)$ $1;HttpOnly;Secure

Для версии ниже Apache 2.2.4 используйте следующее:

Header set Set-Cookie HttpOnly;Secure 

затем перезагрузите сервер