Пример #1
0
 /**
  *
  */
 public function sendAttackData()
 {
     if ($this->getStorageEngine()->getConfig('attackDataKey', false) === false) {
         $this->getStorageEngine()->setConfig('attackDataKey', mt_rand(0, 0xfff));
     }
     $request = new wfWAFHTTP();
     try {
         $response = wfWAFHTTP::get(sprintf(WFWAF_API_URL_SEC . "waf-rules/%d.txt", $this->getStorageEngine()->getConfig('attackDataKey')), $request);
         if ($response instanceof wfWAFHTTPResponse) {
             if ($response->getBody() === 'ok') {
                 $request = new wfWAFHTTP();
                 $request->setHeaders(array('Content-Type' => 'application/json'));
                 $response = wfWAFHTTP::post(WFWAF_API_URL_SEC . "?" . http_build_query(array('action' => 'send_waf_attack_data', 'k' => $this->getStorageEngine()->getConfig('apiKey'), 's' => $this->getStorageEngine()->getConfig('siteURL') ? $this->getStorageEngine()->getConfig('siteURL') : sprintf('%s://%s/', $this->getRequest()->getProtocol(), rawurlencode($this->getRequest()->getHost()))), null, '&'), $this->getStorageEngine()->getAttackData(), $request);
                 if ($response instanceof wfWAFHTTPResponse && $response->getBody()) {
                     $jsonData = wfWAFUtils::json_decode($response->getBody(), true);
                     if (is_array($jsonData) && array_key_exists('success', $jsonData)) {
                         $this->getStorageEngine()->truncateAttackData();
                         $this->getStorageEngine()->unsetConfig('attackDataNextInterval');
                     }
                 }
             } else {
                 if (is_string($response->getBody()) && preg_match('/next check in: ([0-9]+)/', $response->getBody(), $matches)) {
                     $this->getStorageEngine()->setConfig('attackDataNextInterval', time() + $matches[1]);
                     if ($this->getStorageEngine()->isAttackDataFull()) {
                         $this->getStorageEngine()->truncateAttackData();
                     }
                 }
             }
             // Could be that the server is down, so hold off on sending data for a little while.
         } else {
             $this->getStorageEngine()->setConfig('attackDataNextInterval', time() + 7200);
         }
     } catch (wfWAFHTTPTransportException $e) {
         error_log($e->getMessage());
     }
 }
Пример #2
0
 public function fire()
 {
     $waf = $this->getWaf();
     if (!$waf) {
         return;
     }
     $guessSiteURL = sprintf('%s://%s/', $waf->getRequest()->getProtocol(), $waf->getRequest()->getHost());
     try {
         $request = new wfWAFHTTP();
         $request->setHeaders(array('Content-Type' => 'application/json'));
         $response = wfWAFHTTP::post(WFWAF_API_URL_SEC . "?" . http_build_query(array('action' => 'send_waf_attack_data', 'k' => $waf->getStorageEngine()->getConfig('apiKey'), 's' => $waf->getStorageEngine()->getConfig('siteURL') ? $waf->getStorageEngine()->getConfig('siteURL') : $guessSiteURL, 't' => microtime(true)), null, '&'), '[]', $request);
         if ($response instanceof wfWAFHTTPResponse && $response->getBody()) {
             $jsonData = wfWAFUtils::json_decode($response->getBody(), true);
             if (array_key_exists('data', $jsonData) && array_key_exists('watchedIPList', $jsonData['data'])) {
                 $waf->getStorageEngine()->setConfig('watchedIPs', $jsonData['data']['watchedIPList']);
             }
         }
     } catch (wfWAFHTTPTransportException $e) {
         error_log($e->getMessage());
     }
 }