Пример #1
0
 public function actionIndex()
 {
     $scheduleSeconds = (int) Yii::app()->params['csb']['checkScriptSchedule'];
     $fromCheckPointTime = date('Y-m-d H:i:s', strtotime("-{$scheduleSeconds} seconds"));
     $this->_verbose('Check long interval requests...');
     CsbRequest::model()->checkLongIntervals();
     // clear data
     CsbRequest::model()->deleteAll('time < :time', array(':time' => $fromCheckPointTime));
     CsbIpInfo::model()->deleteAll('till_time < :time', array(':time' => date('Y-m-d H:i:s')));
     $this->_sendNotification($fromCheckPointTime);
 }
Пример #2
0
 public function testLongRequest()
 {
     $ip = '2.2.2.2';
     // test 100 requests per 600 last seconds
     for ($i = 1; $i <= 100; $i++) {
         $request = new CsbRequest();
         $request->ip = ip2long($ip);
         $request->time = date('Y-m-d H:i:s', strtotime("-" . $i * 5 . " second"));
         $request->save();
     }
     CsbRequest::model()->checkLongIntervals();
     // check logs
     $this->assertEquals(1, CsbIpInfo::model()->count('ip = :ip', array(':ip' => ip2long($ip))));
     $this->assertEquals(1, CsbLog::model()->count('ip = :ip', array(':ip' => ip2long($ip))));
 }
Пример #3
0
 /**
  * Check suspicious user's behavior at long intervals
  *
  */
 public function checkLongIntervals()
 {
     $longIntervals = Yii::app()->params['csb']['longIntervals'];
     foreach ($longIntervals as $interval) {
         $suspiciousRows = Yii::app()->db->createCommand()->select('INET_NTOA(ip) as ip, COUNT(*) as cnt')->from($this->tableName())->where('time > :time', array(':time' => date('Y-m-d H:i:s', strtotime("-{$interval['time']} second"))))->group('ip')->having("cnt >= {$interval['count']}")->queryAll();
         foreach ($suspiciousRows as $row) {
             $details = array('current request count' => $row['cnt'], 'interval seconds' => $interval['time'], 'request threshold value' => $interval['count'], 'block time' => $interval['blockTime']);
             CsbIpInfo::model()->isBlockIp($row['ip'], $details);
         }
     }
 }
Пример #4
0
 /**
  * Add new ip info
  * @param $ip
  * @param $type
  * @param $tillTime
  * @return CsbIpInfo
  */
 public function addIpInfo($ip, $type, $tillTime)
 {
     $ipInfo = CsbIpInfo::model()->find('id = :ip', array(':ip' => ip2long($ip)));
     if (!$ipInfo) {
         $ipInfo = new CsbIpInfo();
         $ipInfo->ip = ip2long($ip);
     }
     $ipInfo->setAttributes(array('ip_type' => $type, 'till_time' => $tillTime));
     $ipInfo->save();
     return $ipInfo;
 }