johnsnook / yii2-visitors
此扩展程序获取与IP地址关联的访问者信息,包括代理和地理位置信息,并记录访问情况,检查是否在黑名单或白名单中,并采取相应的行动。
Requires
- kassner/log-parser: ~1.0
- yiisoft/yii2: *
This package is not auto-updated.
Last update: 2024-09-24 17:39:14 UTC
README
Yii2 - 访问者
此扩展程序是网站管理员用来防止恶意访问的半安全、半SEO(搜索引擎优化)工具。
它跟踪与访问者IP地址和用户代理(浏览器/操作系统)信息关联的访问者信息,检索代理和"IP信息",包括ISP地理位置信息,记录访问情况,并检查黑名单或白名单规则,采取适当的行动。
包括用于查看、搜索、过滤和图形(包括GIS!)探索您的网站访问者的工具。
安装
1. 下载
安装此扩展程序的首选方式是通过 composer。
运行
php composer.phar require --prefer-dist johnsnook/yii2-visitors "*"
或
"johnsnook/yii2-visitors": "*"
将以下内容添加到您的 composer.json
文件的 require 部分。
2. 配置
扩展程序安装完成后,将 'visitor' 添加到配置文件的自启动部分
'bootstrap' => [ 'log', 'visitor', ],
然后添加最小模块定义
'modules' => [ ... 'visitor' => [ 'class' => 'johnsnook\visitor\Module', ], ... ],
路由在模块文件中定义为 $urlRules。这些也可以在模块定义中重新定义。默认情况下,对于美观URL,它们看起来像这样
'visitor' => '/visitor/visitor/index', 'visitor/index' => '/visitor/visitor/index', 'visitor/blowoff' => '/visitor/visitor/blowoff', 'visitor/<id>' => 'visitor/visitor/view', 'visitor/update/<id>' => 'visitor/visitor/update',
3. 更新数据库模式
最后,您需要通过应用迁移来更新数据库模式。请确保您已正确配置 db
应用组件,并运行以下命令
$ php yii migrate/up --migrationPath=@vendor/johnsnook/yii2-visitor/migrations
免费API密钥
-
为了让地图在访客视图中渲染,您必须有一个MapQuest密钥。前往 https://developer.mapquest.com/plan_purchase/steps/business_edition/business_edition_free/register 获取免费API密钥。如果没有设置,地图将不会显示。
-
ipinfo.io每天限制请求数量为100,但有了密钥,您可以每天请求1000次。前往 https://ipinfo.io/signup 获取免费API密钥。如果没有设置,您每天将限制为100个请求。
-
proxycheck.io每天限制请求数量为100,但有了密钥,您可以每天请求1000次。前往 https://proxycheck.io/ 获取免费API密钥。如果没有设置,您每天将限制为100个请求。
-
Whatismybrowser.com是一项严肃的业务,因此使用其服务必须使用API。前往 https://developers.whatismybrowser.com/api/signup/basic 获取免费API密钥,但请准备提供"应用程序名称"和网站。如果没有设置,除了基本的USER_AGENT字符串之外,将不会捕获任何数据。
自定义
因此,您应该能够访问 http://yoursit.biz/index.php?r=visitor/visitor/index
或,如果您启用了美观URL,http://yoursite.com/visitor
,并看到访客索引。
但您可能想要创建自己的视图。如果是我,我会把控制器和视图复制到您的后端或基本控制器和视图目录。但也许还有更好的实践方法。
我已经留下了布局为空,以便页面应该使用您的布局/主题渲染。
当您完成所有密钥的获取,并决定有一些控制器操作您不感兴趣跟踪时,您的模块配置可能看起来像这样
'modules' => [ ... 'visitor' => [ 'class' => 'johnsnook\visitor\Module', 'ipInfoKey' => 'Not a real key, obviously', 'proxyCheckKey' => 'Not a real key, obviously', 'mapquestKey' => 'Not a real key, obviously', 'blowOff' => 'site/nope', 'ignorables' => [ 'acontroller' => ['ignore-me', 'ignore-that'], 'whitelist' => ['127.0.0.1', '24.99.155.86'] ] ], ... ],
如您所见,您可以添加自定义的'blowoff'控制器操作。访客将被传递进来,这样您就可以显示名称和吹气消息。
关于'ignorables'配置数组的一些注意事项。您可以添加要忽略的控制器和操作,以及要忽略的IP地址白名单。这些将不会添加到访问日志中。
用法
如果您想了解当前用户的信息,您可以从模块中获取访客模型,并像这样使用
$visitor = \Yii::$app->getModule('visitor')->visitor; // give a special hello to people in Atlanta or your ex wife if ($visitor->info->city === 'Atlanta' || $visitor->info->ip_address === '99.203.4.238') { echo "Your city sucks balls"; }
导入现有的Apache访问日志
为了启动访客数据,您可以导入apache2日志,只要您(不是www-data)有权查看它们,并且它们是标准的Apache格式。
这是通过位于https://github.com/kassner/log-parser的非常优秀的解析库实现的。
默认情况下,它假设您的访问日志位于'/etc/httpd/logs',因为我的就是那里。您可以指定另一个路径作为第一个参数。
第二个参数用于指定您要导入的文件。默认情况下,它寻找access*,但也可以提供一个不带空格的逗号分隔的列表。
# The default, looks for /etc/httpd/logs/access* php yii visitor/import/logs # Looks for /my/own/private/idaho/access* php yii visitor/import/logs '/my/own/private/idaho' # Will process /etc/httpd/log/access_log-20180603 and /etc/httpd/log/access_log-20180610 ONLY. php yii visitor/import/logs '/etc/httpd/logs' access_log-20180603,access_log-20180610
要查看实际效果,请访问https://snooky.biz/visitor