public function run($client) { // todo debug模式下记录运行详细日志 unset($script); foreach ($this->scripts as $key => $script) { $runner = new $script['script'](); $result = $runner->run($script['config'], $client); Common::Log()->debug(__METHOD__, 'Running script detection ' . $script['script'] . ' with result ' . $result); if (!$result) { $this->error = $runner->getError(); Common::Log()->info(__METHOD__, 'Running script detection ' . $script['script'] . ' with error ' . $this->error); return false; } } }
private function checkCodeCount($checkCode) { if ($checkCode) { // 设置白名单标识 $this->setWhiteFlag(); // 重置统计信息 $this->unsetCount(); Common::Log()->info(__METHOD__, sprintf('Ip[%s] session[%s] robot challenge succeed', $this->client['ip'], $this->client['session'])); return true; } else { if ($checkCode === false) { Common::Log()->warn(__METHOD__, sprintf('Ip[%s] session[%s] robot challenge failure', $this->client['ip'], $this->client['session'])); } $ipFailure = intval(Common::M()->get($this->client['ip'], self::IP_FAILURE_PREFIX)); $ipFailure++; if ($ipFailure > Common::getConfig('ip_failure_limit', $this->config)) { Common::Log()->warn(__METHOD__, sprintf('Ip[%s] robot challenge fail too many times', $this->client['ip'])); // 如果验证失败则在指定挑战失败上限次数后将IP加入全局黑名单 $this->wafPHP->addBlackList(); // 重置统计信息 $this->unsetCount(); return false; } else { // 累加该IP挑战失败次数 Common::M()->set($this->client['ip'], $ipFailure, Common::getConfig('ip_failure_lifetime', $this->config), self::IP_FAILURE_PREFIX); return null; } } }