Итак, я хочу зарегистрировать информацию, которая эквивалентна cookie сеанса (называемому session_id
) в журналах Apache. Я не хочу просто помещать cookie в формат журнала (%{sid}i
), потому что компрометация файла журнала позволит захватить сеанс.
На мой взгляд, наиболее разумной идеей было бы регистрировать хэш файла cookie сеанса.
Как лучше всего этого добиться?
Да, хэш может быть установлен во втором файле cookie одновременно с файлом cookie сеанса, однако он полагается либо на проверку хэша для каждого запроса, либо на доверие клиенту, что он не будет изменять второй файл cookie - я бы предпочел хеш-вычисление должно выполняться на стороне сервера, без передачи клиенту;
Да, я почти уверен, что модуль Apache может быть написан, например, для добавления переменной среды на лету при каждом запросе, но я немного опасаюсь делать это, так как у меня нет необходимого опыта;
РЕДАКТИРОВАТЬ: Хотя ответ, основанный на функциональности, представленной в версии Apache 2.4, будет информативным, мне лично нужен ответ, который будет работать в версии 2.2, поскольку я не отвечаю за обновление серверов.
Трубопроводные бревна может быть лучшим вариантом для преодоления ограничений CustomLog / LogFormat: он «увеличивает гибкость ведения журнала без добавления кода на главный сервер».
В Apache 2.4 появилась новая функция под названием ap_expr вводится. Он позволяет использовать функции в строковом контексте в конфигурациях Apache, например
# Function example in string context
Header set foo-checksum "expr=%{md5:foo}"
Однако это не работает в CustomLog и контекст LogFormat:
%{md5:foo}
приводит к -
%{md5:%{sid}C}
приводит к -}
%{md5:sid}C
буквально cookie "md5: sid" вместо md5 ("sid")Это оставляет нас с конвейерными журналами, поскольку установка другого файла cookie, содержащего контрольную сумму, не была вариантом. Если бы это было приемлемо, было бы полезно использовать ap_expr.