HttpOnly и защищенные cookie с Apache mod_header для всех cookie

Я использую Apache 2.2.29 для веб-сайта. Апач работает и для обслуживания страниц от Drupal, и как обратный прокси к серверу внутреннего приложения. Из соображений безопасности мы хотим добавить, что флаги HttpOnly и безопасный ко всем cookie отправляют клиентам. Чтобы сделать это, я имею, устанавливают следующие правила в апачах

Header edit Set-Cookie "(?i)^((?:(?!;\s?HttpOnly).)+)$" "$1; HttpOnly"
Header edit Set-Cookie "(?i)^((?:(?!;\s?secure).)+)$" "$1; secure"

И это хорошо работает для некоторых cookie, но другие не изменяются. При рассмотрении reponse заголовка я вижу следующее:

HTTP/1.1 200 OK
Date: Thu, 20 Nov 2014 22:50:01 GMT
Expires: Sun, 19 Nov 1978 05:00:00 GMT
Last-Modified: Thu, 20 Nov 2014 22:50:01 GMT
Cache-Control: store, no-cache, must-revalidate
Cache-Control: post-check=0, pre-check=0
Set-Cookie: SESSbfb02014bca2e49545c2cacd8a8cfcfa=perqn1l3mn2saselmabnn4vla7; expires=Sun, 14-Dec-2014 02:23:21 GMT; path=/; domain=.www6.server.com; HttpOnly; secure
Set-Cookie: textsize=100; expires=Fri, 20-Nov-2015 22:50:02 GMT; path=/; HttpOnly; secure
X-Cnection: close
Content-Type: text/html; charset=utf-8
Set-Cookie: TS01bd748d=015ca10fb56fc0a5579c6ad014a58a39be63cd86225d41d272c4e99ff818001921bf8a6afe8ff8786edc26a530281a2446ac250c26; Path=/
Set-Cookie: TS01ccb021=015ca10fb57273008302fba8649a42c6cd81f3c49f372d5d34fa4c31fc345f6be3c40dff1b5db114bd54174903e671f755744110dd; path=/; domain=.server.com
Set-Cookie: TS01bd748d_28=01d8892cb5da9e13891c7af98cab63f3bea0d8549b995c92d87d9b10240fcf906df41411935b1d5db889e1e5178debe05972be3916; Path=/
Content-Length: 39891

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

Только первые два cookie изменяются, чтобы иметь флаги. Другие три не. Они, кажется, установлены позже, или по крайней мере они появляются после первых двух. Я не знаю, почему это имеет значение, но это, кажется, делает. Какие-либо предложения о том, как зафиксировать их?

5
задан 21 November 2014 в 01:00
1 ответ

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

Согласно документации:

Заголовок [ условие ] set | append | merge | add | unset | echo | edit header [ значение] [замена] [ранний | env = [!] переменная]

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

Значение по умолчанию onsuccess , возможно, потребуется изменить на всегда ниже обстоятельства, аналогичные перечисленным ниже. Отметим также, что повторение этой директивы с обоими условиями имеет смысл в некоторых сценарии, потому что всегда не является надмножеством успеха в отношении к существующим заголовкам:

  • Вы добавляете заголовок к неуспешному (не 2xx) ответу, например к перенаправлению, и в этом случае только таблица, соответствующая всегда используется в окончательном ответе.
  • Вы изменяете или удаляете заголовок, созданный сценарием CGI, и в этом случае сценарии CGI находятся в таблице, соответствующей всегда
    и не в таблице по умолчанию.
  • Вы изменяете или удаляете заголовок, сгенерированный какой-либо частью сервера, но этот заголовок не обнаруживается по умолчанию при условии.

REF: http://httpd.apache.org/docs/2.2/mod/mod_headers.html

Вы можете исправить это, используя Заголовок всегда редактировать .

Например,

Header always edit Set-Cookie "(?i)^((?:(?!;\s?HttpOnly).)+)$" "$1; HttpOnly"
Header always edit Set-Cookie "(?i)^((?:(?!;\s?secure).)+)$" "$1; secure"

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

7
ответ дан 3 December 2019 в 01:24

Теги

Похожие вопросы