Exemplo n.º 1
0
 public function actionPost()
 {
     if (Yii::app()->user->isGuest || empty($_POST)) {
         throw new CHttpException(404, 'Страница не найдена');
     }
     echo Yii::app()->user->getState('AnketaFingerprint', 0);
     if (Yii::app()->user->getState('AnketaFingerprint', 0)) {
         return;
     }
     $af = new AnketaFingerprint();
     $af->unsetAttributes();
     if (!empty($_POST)) {
         $af->attributes = $_POST;
     }
     $af->accept = $_SERVER['HTTP_ACCEPT'];
     $af->user_agent = $_SERVER['HTTP_USER_AGENT'];
     $af->id_anketa = Yii::app()->user->id;
     $af->user_agent_md5 = md5($af->user_agent);
     $af->fonts_md5 = md5($af->fonts);
     $af->plugins_md5 = md5($af->plugins);
     $dp = $af->search();
     if ($dp->totalItemCount == 0) {
         $af->save();
         $anketaFingerprint = $af->id;
     } else {
         $d = $dp->getData();
         if (is_array($d)) {
             $d = $d[0];
         }
         $anketaFingerprint = $d->id;
     }
     Yii::app()->user->setState('AnketaFingerprint', $anketaFingerprint);
 }
Exemplo n.º 2
0
 public function actionFingerprints()
 {
     Yii::app()->user->me->checkClone();
     $fp = Yii::app()->user->getState('AnketaFingerprint');
     $fp = AnketaFingerprint::model()->findByPk($fp);
     echo $fp->fonts;
 }
Exemplo n.º 3
0
 public function checkClone()
 {
     if ($this->getAccountType() == Anketa::ACCOUNT_PREMIUM) {
         return;
     }
     // премиум(?)
     if ($this->status_bad) {
         return;
     }
     // уже клон/бан или снятый клон/бан
     static $wasHere = 0;
     if ($this->id == Yii::app()->user->id) {
         Yii::log($this->id . ' fp=' . Yii::app()->user->getState('AnketaFingerprint') . ' | ' . $_SERVER['REQUEST_URI'], CLogger::LEVEL_INFO, 'checkClone');
     }
     $status_bad = self::BAD_STATUS_NONE;
     foreach ($this->findClones() as $clone) {
         /** @var $clone Anketa */
         if ($this->first_visit <= $clone->first_visit) {
             // если анкета зарегистрирована раньше клона
             continue;
         }
         if ($clone->status_bad == self::BAD_STATUS_BAN) {
             $status_bad = self::BAD_STATUS_BAN;
         } else {
             $status_bad = self::BAD_STATUS_CLONE;
         }
         Yii::log('bad_status ' . $status_bad . ' ' . $this->id . ' <- ' . $clone->id, CLogger::LEVEL_INFO, 'ban');
     }
     if ($status_bad == self::BAD_STATUS_NONE) {
         if ($this->findEtagClones()) {
             foreach ($this->findEtagClones() as $clone) {
                 /** @var $clone Anketa */
                 if ($this->first_visit <= $clone->first_visit) {
                     // если анкета зарегистрирована раньше клона
                     continue;
                 }
                 if ($clone->status_bad == self::BAD_STATUS_BAN) {
                     $status_bad = self::BAD_STATUS_BAN;
                 } else {
                     $status_bad = self::BAD_STATUS_CLONE;
                 }
                 Yii::log('bad_status ' . $status_bad . ' ' . $this->id . ' <- Etag ' . $clone->id, CLogger::LEVEL_INFO, 'ban');
             }
         }
     }
     if ($status_bad == self::BAD_STATUS_NONE) {
         if ($this->id == Yii::app()->user->id) {
             $attributes = array();
             $attributes[] = array('type' => FingerprintBan::TYPE_IP, 'value' => $_SERVER['REMOTE_ADDR']);
             if (Yii::app()->user->getState('FingerprintChecked', 0) === false) {
                 $wasHere++;
             }
             if ($fp = Yii::app()->user->getState('AnketaFingerprint')) {
                 if ($fp = AnketaFingerprint::model()->findByPk($fp)) {
                     // бан по fingerprints
                     foreach (FingerprintBan::$types as $k => $v) {
                         $attributes[] = array('type' => $v, 'value' => md5($fp->{$k}));
                     }
                 }
             }
             foreach ($attributes as $k => $v) {
                 if ($fb = FingerprintBan::model()->findByAttributes($v)) {
                     $status_bad = $fb->status_bad;
                     break;
                 }
             }
             if ($status_bad != self::BAD_STATUS_NONE) {
                 Yii::log('bad_status ' . $status_bad . ' ' . $this->id . ' <- ' . FingerprintBan::$typesText[$fb->type] . ' ' . $fb->value . ' ', CLogger::LEVEL_INFO, 'ban');
             }
             if ($fp || !$wasHere) {
                 Yii::app()->user->setState('FingerprintChecked', 1);
             } else {
                 Yii::app()->user->setState('FingerprintChecked', false);
             }
         }
     }
     // За клонов до введения оплаты не блокируем.
     if ($status_bad == self::BAD_STATUS_CLONE) {
         $status_bad = self::BAD_STATUS_NONE;
     }
     // авторазбан при входе
     if ($status_bad != self::BAD_STATUS_NONE) {
         if ($this->totalPaid > 0) {
             $status_bad = self::BAD_STATUS_PAID;
         }
     }
     $this->setBad($status_bad);
     if ($status_bad & 1) {
         $this->trialReset();
     }
 }
Exemplo n.º 4
0
        ?>
</h2>
    <?php 
        $prints = array();
        $i = 1;
        foreach ($model->fingerprints as $fingerprint) {
            if (!in_array($fingerprint->{$attribute}, $prints)) {
                $prints[] = $fingerprint->{$attribute};
                if (in_array($fingerprint->{$attribute}, array('No Flash or Java fonts detected', 'undefined', 'undefined (via Flash)', '(via Flash)'))) {
                    echo "<p class='red'>{$i} Нет</p>";
                    $i++;
                    continue;
                }
                echo $_SERVER['REMOTE_ADDR'] != '89.169.186.440' ? FingerprintBan::drawForm(array('id_anketa' => $model->id, 'type' => FingerprintBan::$types[$attribute], 'value' => md5($fingerprint->{$attribute}))) : '', "<p><b>{$i} ", mb_substr($fingerprint->{$attribute}, 0, 100000, 'utf-8'), " </b></p>";
                $i++;
                if (!($fingerprints = AnketaFingerprint::model()->findAllByAttributes(array($attribute . '_md5' => $fingerprint->{$attribute . '_md5'}), array('condition' => 'id_anketa <> ' . $model->id, 'limit' => 21)))) {
                    //'id_anketa'=>'<>'.$model->id
                    continue;
                }
                if (count($fingerprints) > 20) {
                    echo "Больше 20 <span class='pointer blue toggle_sibling'> Показать/скрыть </span> <div style='display:none'>";
                } else {
                    echo "<div>";
                }
                echo "<table>";
                foreach ($fingerprints as $fpclone) {
                    $zombie = $fpclone->anketa;
                    //                    echo CHtml::link($zombie->name.", {$zombie->age}, {$zombie->city}",$zombie->link,array('target'=>'_blank'))  ;
                    //                    echo "<tr><td><span ><a class='$class' target='_blank' href='http://www.nic.ru/whois/?query={$ipdata['ip']}'>{$ipdata['ip']}</span></td>";
                    echo "<td>" . CHtml::link($zombie->name . ", {$zombie->age}, {$zombie->city}", $zombie->link, array('target' => '_blank')) . "</td>";
                    echo CHtml::tag('td', array(), $zombie->contact_count . ' cnt');