【问题标题】:Logging all HTTP requests using .htaccess and PHP使用 .htaccess 和 PHP 记录所有 HTTP 请求
【发布时间】:2014-08-02 06:26:29
【问题描述】:

我需要在我的网站上放置一个 php 脚本来记录所有 HTTP 请求。 access.log 没有足够的信息来满足我的建议。

我的想法是在/www/ 上使用.htaccess,并为每个请求通过一个将保存在一个日志中的php 脚本传递一个重写规则。 (类似于print_r($_GLOBALS)

你们中有人知道这样做的更好方法吗?

【问题讨论】:

  • 你到底想记录什么?
  • 用户代理、客户端 ip、方法、完整请求的 uri、cookie、post 和 get 参数。我真的需要所有这些信息来了解我的服务器发生了什么
  • Apache Module mod_dumpio 可以做到这一点,Apache 自定义日志可以做到大部分。
  • Dagon,问题是我不想编辑服务器的任何配置,我仅限于 htaccess 和 php 文件。有办法吗?
  • 是的,但它的效率将比使用网络服务器中的工具低一千倍

标签: php apache .htaccess mod-rewrite logging


【解决方案1】:

我知道这是一个老问题。如果您使用的是共享主机,正如您所建议的那样,您可能仅限于通过脚本重定向所有流量。

我必须这样做一次。对于一个被黑的 WordPress 网站,我需要确定它是如何被攻击的。就像你说的,我将所有带有 .htaccess 文件的请求重定向到一个 PHP 脚本,该脚本将呈现一个简单的“站点正在维护”页面,但它也会记录该请求——发布数据、cookie、上传文件名——几乎任何我想观察的东西。

不过,方便的是,该网站也受到 Cloudflare 的保护;因此,通过这样做,Cloudflare 最终在维护页面上看到了 503 Unavailable,并改为提供缓存,从而使站点几乎完全正常运行。更好的是,维护页面仍然可以记录请求。


我的 .htaccess 文件如下所示:

重写引擎开启 RewriteRule ^index-maintenance\.php$ - [L] RewriteRule .* /index-maintenance.php [L]

然后,index-maintenance.php 文件看起来像:

$value) # echo "$header: $value\r\n"; // 如果您想要原始请求数据与解析后的 POST 数据: # $postdata = file_get_contents('php://input'); # if(strlen($postdata)) echo $postdata."\r\n"; // 发布数据/Cookies/文件 如果(计数($_POST)|| 计数($_COOKIE)){ ob_start(); 回声“POST\n”; var_dump($_POST); 回声“饼干\n”; var_dump($_COOKIE); 回声“文件\ n”; var_dump($_FILES); $postdata = ob_get_clean(); echo str_replace("\n","\r\n",$postdata); } 回声“\r\n”; // 使用随机字符串不鼓励猜测 // 如果目录可通过网络访问,则为 url;但是,如果在 // 所有可能,使其不可访问: file_put_contents('../requests_n5io09d21mkp.log',ob_get_clean(),FILE_APPEND); } // 然后,一个简单的维护页面: ?> 网站维护中

我们很抱歉。该网站正在维护中。
请稍后再回来查看。

正文>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2013-10-09
  • 2010-12-16
  • 2016-03-09
  • 2012-04-14
相关资源
最近更新 更多