既然你已经有了源文件,我相信有一种更简单、更容易的方法(与在低级别重新路由网络流量相比,拦截被调用的方法。)
首先,识别并替换你的 php 文件中的方法(记得复制一份!)。例如,如果你想拦截mail()
,你可以找到mail(
并替换为shim_mail(
。您也可以为其他有趣的方法(例如mysql_connect()
.
完成后,include 'shim.php';
在文件顶部添加。“shim”将充当 php 脚本和实际方法之间的一层,因此您可以选择将其记录到文本文件中,允许它执行,甚至将其指向副本数据库!
shim.php
$logfile = 'log.txt';
function shim_mysql_connect($server, $username, $password, $new_link = false, $client_flags = 0)
{
file_put_contents($logfile, file_get_contents($logfile) . "\r\nmysql_connect() to " . $server . " with username " . $username . " and password " . $password);
// intercept the command and point it to the 'honeypot'
return mysql_connect('your_new_server', 'username', 'password');
}
function shim_mail($to, $subject, $message, $additional_headers = '', $additional_parameters = '')
{
file_put_contents($logfile, file_get_contents($logfile) . "\r\nmail() to " . $to . " with subject " . $subject . " and message " . $message);
// don't actually send an email
}
?>
在这个 shim 文件中,您可以添加您有兴趣了解的功能(只需复制与原始文件相同的方法签名并打印相关日志即可)。通过观察日志,你可能会发现更多关于php脚本的信息!
(在我编写这个的中途,我意识到 Daniel W. Steinbrook 也提出了一个类似的方法。我的方法有一个小小的优点,它在不添加新依赖项的情况下更简单,但 runkit 听起来是一个更正确的方法。无论哪种方式,您可以简单地选择一个有效的!)