因此,我想在 Apache 日志中记录相当于会话 cookie 的信息(称为session_id
)。我不想简单地将 cookie 放入日志格式(%{sid}i
),因为日志文件的泄露将允许会话劫持。
我认为最合理的想法是记录会话 cookie 的哈希值。
实现这一目标的最佳方法是什么?
是的,哈希值可以与会话 cookie 同时设置在第二个 cookie 中,但是这依赖于在每个请求上验证哈希值,或者相信客户端不会修改第二个 cookie —— 我希望哈希值计算在服务器端完成,而不传输到客户端;
是的,我很确定可以编写一个 Apache 模块,例如,在每个请求时动态添加一个环境变量,但我对此有点谨慎,因为我缺乏必要的专业知识;
编辑:虽然依赖于 Apache 2.4 版本中引入的功能的答案会很有帮助,但我个人需要一个可以在 2.2 上运行的答案,因为我并不负责服务器的升级。
答案1
管道日志可能是克服 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 会很有帮助。