예제 #1
0
 protected function check_url($v)
 {
     $CI =& get_instance();
     if (strpos($v, str_replace(array('http://', 'https://'), '', $CI->config->item('base_url')))) {
         return FALSE;
     } else {
         if (filter_var(_make_clean_url($v), FILTER_VALIDATE_URL) === FALSE) {
             return FALSE;
         } else {
             return TRUE;
         }
     }
 }
예제 #2
0
 function _parse_external_js($url)
 {
     $url = _make_clean_url($url);
     if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) {
         return FALSE;
     } else {
         $url_header = _is_url_exist($url);
         if ($url_header) {
             /*_request_timeout(3);
               $html = @file_get_contents($url);*/
             $html = @file_get_html($url_header, false, stream_context_create(array('http' => array('timeout' => 3))));
             if ($html) {
                 $external_js = array();
                 $external_js_count = 0;
                 $external_js_count_max = 20;
                 foreach ($html->find('script') as $script) {
                     $src = $script->src;
                     if ($src != null) {
                         if (strpos($src, '//') === FALSE) {
                             /*if($src[0] === '/') {
                                 $src = $url.$src;
                               }
                               elseif($src[0] != '.') {
                                 $src = $url.'/'.$src;
                               }
                               else {
                                 $src = null;
                               }*/
                             if (isset($url_header[strlen($url_header) - 1]) && $url_header[strlen($url_header) - 1] !== '/') {
                                 $url_header .= '/';
                             }
                             $src = url_to_absolute($url_header, $src);
                         }
                         if (_is_url_exist($src)) {
                             $external_js[] = $src;
                         }
                     }
                     $external_js_count++;
                     if ($external_js_count === $external_js_count_max) {
                         unset($external_js_count, $external_js_count_max);
                         break;
                     }
                 }
                 $html = NULL;
                 unset($url_header);
                 if (!empty($external_js)) {
                     return $external_js;
                 } else {
                     unset($external_js);
                     return FALSE;
                 }
             } else {
                 $html = NULL;
                 unset($url_header);
                 return FALSE;
             }
         } else {
             unset($url_header);
             return FALSE;
         }
     }
 }
예제 #3
0
파일: home.php 프로젝트: bitbybit/avdetect
 public function index()
 {
     $this->load->helper(array('security', 'form', 'captcha'));
     $this->load->library(array('form_validation', 'punycode', 'email', 'session'));
     $data = array('title' => 'Проверка URL', 'error' => '', 'output' => '');
     $this->form_validation->set_rules(array(array('field' => 'url', 'label' => 'URL', 'rules' => 'required|trim|xss_clean|max_length[2083]|check_url'), array('field' => 'email', 'label' => 'E-mail', 'rules' => 'trim|xss_clean|max_length[254]|valid_email'), array('field' => 'captcha', 'label' => 'Проверочный код', 'rules' => 'required|trim|xss_clean|max_length[8]|check_captcha')));
     if ($this->form_validation->run() == FALSE) {
         $data['output'] = $this->load->view('home/home', array('captcha' => _captcha_activate()), TRUE);
     } else {
         _captcha_destroy();
         $this->load->model('home_model');
         $cleaned_url = _make_clean_url($this->input->post('url'));
         $cleaned_url_hash = md5($cleaned_url . $this->config->item('secret_url'));
         $already_checked = $this->home_model->_already_checked(array('url' => $cleaned_url));
         if ($already_checked) {
             if ($this->session->flashdata('last_check') && $this->session->flashdata('last_check') === $cleaned_url) {
                 $this->session->keep_flashdata('last_check');
             } else {
                 if ($this->input->post('email')) {
                     _send_mail_url($this->input->post('email'), $cleaned_url_hash, $cleaned_url);
                     $this->session->set_flashdata('last_check', $cleaned_url);
                 }
             }
             redirect('check/' . $cleaned_url_hash);
             /*if(is_object($already_checked)) {
                 $already_checked_row = $already_checked->row();
                 $data['title'] .= ': '.$cleaned_url;
                 $data['error'] = 'Ссылка на результаты проверки будет выслана на e-mail: '._mask_email($this->input->post('email'));
                 if($this->session->flashdata('last_check') && $this->session->flashdata('last_check') === $cleaned_url) {
                   $this->session->keep_flashdata('last_check');
                 }
                 else {
                   _send_mail_url($this->input->post('email'),$cleaned_url_hash,$cleaned_url);
                   $this->session->set_flashdata('last_check',$cleaned_url);
                 }
                 $already_checked = NULL;
                 $already_checked_row = NULL;
               }
               else {
                 $data['error'] = 'Ошибка отправки данных. (#1)';
               }*/
         } else {
             if (!_is_url_exist($cleaned_url)) {
                 $data['error'] = 'URL недоступен, не существует, либо слишком большой объём данных. (#2)';
                 $data['output'] = $this->load->view('home/home', array('captcha' => _captcha_activate()), TRUE);
             } else {
                 $add_queue = $this->home_model->_add_queue(array('url' => $cleaned_url, 'ip' => $this->input->ip_address(), 'email' => $this->input->post('email') ? $this->input->post('email') : ''));
                 $add_queue = NULL;
                 $this->session->set_flashdata('last_check', $cleaned_url);
                 redirect('check/' . $cleaned_url_hash);
                 /*$result = $this->home_model->_get_result(array(
                     'hash' => $cleaned_url_hash,
                   ));
                   if($result) {
                     $result_row = $result->row();
                     $rumonth = $this->config->item('rumonth');
                     if(isset($result_row->domain)) {
                       $data['title'] .= ': '.$cleaned_url;
                       $data['error'] = 'Ссылка на результаты проверки будет выслана на e-mail: '._mask_email($this->input->post('email'));
                       $this->session->set_flashdata('last_check',$cleaned_url);
                     }
                     else {
                       foreach($result->result() as $row) {
                         if($row->hash === $cleaned_url_hash) {
                           $data['title'] .= ': '.$row->url;
                           $data['error'] = $row->url." в очереди на проверку (".$row->qorder." из ".$result->num_rows().").<br>\n".
                                            "Добавлен в базу ".date("j ".$rumonth[date("n",strtotime($row->date))]." Y г. в H:i",strtotime($row->date))." (прошло "._relative_time($row->date).").<br>\n".
                                            "Ссылка на результаты проверки будет выслана на e-mail: "._mask_email($row->email);
                           $this->session->set_flashdata('last_check',$row->url);
                           break;
                         }
                       }
                       if(empty($data['error'])) {
                         $data['error'] = 'Ошибка отправки данных. (#3)';
                       }
                     }
                     $result_row = NULL;
                   }
                   else {
                     $data['error'] = 'Ошибка отправки данных. (#4)';
                     $data['output'] = $this->load->view('home/home','',TRUE);
                   }
                   $result = NULL;*/
             }
         }
         unset($cleaned_url, $cleaned_url_hash, $already_checked);
     }
     _no_cache();
     $this->load->view('home/index', array('auto_version_js' => _auto_version('js/app.js'), 'auto_version_css' => _auto_version('css/app.css'), 'title' => $data['title'], 'output' => $data['output'], 'error' => $data['error']));
 }