AutoBanSubscribeJob.php 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use App\Http\Models\Config;
  5. use App\Http\Models\UserSubscribe;
  6. use App\Http\Models\UserSubscribeLog;
  7. use Log;
  8. class AutoBanSubscribeJob extends Command
  9. {
  10. protected $signature = 'command:autoBanSubscribeJob';
  11. protected $description = '自动封禁异常订阅链接';
  12. public function __construct()
  13. {
  14. parent::__construct();
  15. }
  16. public function handle()
  17. {
  18. $config = $this->systemConfig();
  19. // 封禁24小时访问异常的订阅链接
  20. if ($config['is_subscribe_ban']) {
  21. $subscribeList = UserSubscribe::query()->where('status', 1)->get();
  22. if (!$subscribeList->isEmpty()) {
  23. foreach ($subscribeList as $subscribe) {
  24. // 24小时内的请求次数
  25. $request_times = UserSubscribeLog::query()->where('sid', $subscribe->id)->where('request_time', '>=', date("Y-m-d H:i:s", strtotime("-24 hours")))->distinct('request_ip')->count('request_ip');
  26. if ($request_times >= $config['subscribe_ban_times']) {
  27. UserSubscribe::query()->where('id', $subscribe->id)->update(['status' => 0, 'ban_time' => time(), 'ban_desc' => '存在异常,自动封禁']);
  28. }
  29. }
  30. }
  31. }
  32. Log::info('定时任务:' . $this->description);
  33. }
  34. // 系统配置
  35. private function systemConfig() {
  36. $config = Config::query()->get();
  37. $data = [];
  38. foreach ($config as $vo) {
  39. $data[$vo->name] = $vo->value;
  40. }
  41. return $data;
  42. }
  43. }