如何使用 Apache HTTPD 记录会话 cookie 的哈希值?

如何使用 Apache HTTPD 记录会话 cookie 的哈希值?

因此,我想在 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 会很有帮助。

相关内容