Пример #1
0
 public function fire()
 {
     $waf = $this->getWaf();
     if (!$waf) {
         return;
     }
     $guessSiteURL = sprintf('%s://%s/', $waf->getRequest()->getProtocol(), $waf->getRequest()->getHost());
     try {
         $this->response = wfWAFHTTP::get(WFWAF_API_URL_SEC . "?" . http_build_query(array('action' => 'get_waf_rules', 'k' => $waf->getStorageEngine()->getConfig('apiKey'), 's' => $waf->getStorageEngine()->getConfig('siteURL') ? $waf->getStorageEngine()->getConfig('siteURL') : $guessSiteURL, 'h' => $waf->getStorageEngine()->getConfig('homeURL') ? $waf->getStorageEngine()->getConfig('homeURL') : $guessSiteURL, 'openssl' => $waf->hasOpenSSL() ? 1 : 0, 'betaFeed' => (int) $waf->getStorageEngine()->getConfig('betaThreatDefenseFeed')), null, '&'));
         if ($this->response) {
             $jsonData = wfWAFUtils::json_decode($this->response->getBody(), true);
             if (is_array($jsonData)) {
                 if ($waf->hasOpenSSL() && isset($jsonData['data']['signature']) && isset($jsonData['data']['rules']) && $waf->verifySignedRequest(base64_decode($jsonData['data']['signature']), $jsonData['data']['rules'])) {
                     $waf->updateRuleSet(base64_decode($jsonData['data']['rules']), isset($jsonData['data']['timestamp']) ? $jsonData['data']['timestamp'] : true);
                     if (array_key_exists('premiumCount', $jsonData['data'])) {
                         $waf->getStorageEngine()->setConfig('premiumCount', $jsonData['data']['premiumCount']);
                     }
                 } else {
                     if (!$waf->hasOpenSSL() && isset($jsonData['data']['hash']) && isset($jsonData['data']['rules']) && $waf->verifyHashedRequest($jsonData['data']['hash'], $jsonData['data']['rules'])) {
                         $waf->updateRuleSet(base64_decode($jsonData['data']['rules']), isset($jsonData['data']['timestamp']) ? $jsonData['data']['timestamp'] : true);
                         if (array_key_exists('premiumCount', $jsonData['data'])) {
                             $waf->getStorageEngine()->setConfig('premiumCount', $jsonData['data']['premiumCount']);
                         }
                     }
                 }
             }
         }
     } catch (wfWAFHTTPTransportException $e) {
         error_log($e->getMessage());
     } catch (wfWAFBuildRulesException $e) {
         error_log($e->getMessage());
     }
 }