【发布时间】:2016-06-08 03:47:11
【问题描述】:
所以我一直致力于在 laravel 项目中创建一个 webbug,它会在加载任何图像时记录基本信息。但是,我的 .htaccess 文档似乎没有正确识别我的扩展,因为它没有执行我的脚本。我知道我的脚本在我运行它时会起作用,数据库会获得新的输入。脚本本身没有被调用。我正在使用 Blade 模板来创建在路由资源上执行的视图,或者在这种情况下用于测试特定路由。
routes.php
Route::resource('identifyVerification', 'PhishingController');
Route::get('/breachReset','PhishingController@breachReset');
Route::get('/breachReset/verifyUser', 'PhishingController@breachVerify');
Route::get('/path/to/sec_question.png','PhishingController@imageReturnTest');
我使用的测试路线是最后一个,@imageReturnTest。它引用了 PhishingController 中定义的函数,如下所示。它正在打开我在公共目录内的 img 目录中的测试图像。
public function imageReturnTest() {
$path = './img/sec_question.png';
$fp = fopen($path,'rb');
header('Content-Type: image/png');
header('Content-Length: ' . filesize($path));
fpassthru($fp);
exit;
}
加载此图像时,我的 .htaccess 文件会看到加载了扩展名为 .png 的图像,然后运行重定向以执行 webbug_test.php 页面。下面是我在 laravel 中的 .htaccess 文件。我的规则不仅应该在 PNG 上执行,还应该在任何图像(JPEG、PNG、GIF 等 - 可以根据需要添加扩展名)上执行。如您所见,我尝试了通过 StackOverflow 和其他描述如何设置透明 Webbug 的网站找到的解决方案。两者都没有工作。
.htaccess
<IfModule mod_rewrite.c>
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
RewriteEngine On
# My new rule to execute webbug
RewriteRule ^(.*).(png|jpg|gif)$ webbug_test.php
# Redirect Trailing Slashes...
RewriteRule ^(.*)/$ /$1 [L,R=301]
# Handle Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>
我也为 .htaccess 试过这个
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} .*jpg$|.*gif$|.*png$ [NC]
RewriteRule (.*) /webbug_test.php
下面是我的 webbug_test.php 脚本,应该通过 .htaccess 调用。正如我所说,我可以通过 IDE 测试器运行这个页面,它会运行它的 SQL 执行并将适当的信息插入到数据库中,以便它的即兴执行。但是,加载图像时不会调用它。
webbug_test.php
<?php
$db = new mysqli('host', 'username', 'password', 'database');
if (mysqli_connect_errno()) {
echo 'Error: Could not connect to the database..';
exit;
}
$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
$reqpath = $_SERVER['REQUEST_URI'];
$browseragent = $_SERVER['HTTP_USER_AGENT'];
$date = date("Y-m-d");
$time = date("H:i:s");
print "vars created";
$sql = "INSERT INTO database.table (id,ip,host,
browser_agent,req_path,access_date,access_time) VALUES
(null,'$ip','$host','$browseragent','$reqpath','$date',
'$time');";
print "sql executed";
$result = $db->query($sql);
$result->free();
$db->close();
header( 'Content-type: image/jpg' );
?>
说了这么多,我不确定如何推进这个重定向。我已经研究过执行名称计划,使该脚本认为它是图像,然后执行 RuleRewrite 以将 .jpg 作为 php 脚本执行,但是,我仍然希望显示请求的图像并且我不想必须格式化我的脚本以接收管道数据并在 SQL 插入顶部返回请求的图像。关于我可能做错了什么或如何更好地实现全局 webbug 的任何反馈?
【问题讨论】:
标签: php .htaccess laravel mod-rewrite