1

人がログインしたいが、最初の試行に失敗した場合、キャプチャが表示され、試行は 3 回しか残っていませんが、すべてのリーミング試行に失敗した場合、特定の IP ログインはしばらくブロックされます。どのようにコードイグナイターが可能になるか

これは私のコードです

function login() {
    $this->form_validation->set_rules('username', 'Username', 'trim|required');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|md5');
    //$this->session->unset_userdata('count');
    if($this->session->userdata('count')) {

        $this->form_validation->set_rules('captcha', 'Captcha', 'required|callback_recaptcha_validation');
        $this->session->unset_userdata('count');
    }

    if ($this->form_validation->run() == TRUE) {
        $checkAdminLoginDeatils = $this->admin_model->adminLogin();
        if ($checkAdminLoginDeatils == false) {
            $val='0';
            $val=$this->session->set_userdata('validate','0');
            $val=$val+1;
            $ip_address = $this->input->ip_address();
            $record = $this->db->where('IP', $ip_address)->get('LoginAttempts')->row();
            $this->session->set_userdata('count', '1');
            $vals = array(
                    'img_path'   => './captcha/',
                    'img_url'    =>  base_url().'/captcha/'
            );

            $cap = create_captcha($vals);

            $captcha = array(
                    'captcha_time'  => $cap['time'],
                    'ip_address'    => $this->input->ip_address(),
                    'word'   => $cap['word']
            );

            $data['cap']=$cap;
            $this->session->set_userdata('message', 'Invalid username or password');
            $this->db->select('*');
            $this->db->where('IP',$this->input->ip_address());
            $query=$this->db->get('LoginAttempts');
           if($query->num_rows() == 1) {
                $this->db->set('LastLogin',time());
                if(isset ($val))
                    $this->db->set('Attempts',$val);
                $this->db->where('IP', $this->input->ip_address());
                $result=$this->db->update('LoginAttempts');
            }
            else {
                $insert = array(
                        'LastLogin' => time(),
                        'Attempts' => $val,
                        'IP'    => $this->input->ip_address()
                );


                $query = $this->db->insert_string('LoginAttempts', $insert);
                $this->db->query($query);
            }
            //$time=now();


            $expiration = time()-7200; // Two hour limit
            $this->db->query("DELETE FROM LoginAttempts WHERE LastLogin < ".$expiration);
        } else {
            redirect('admin/admin/dashboard');
        }
    }
4

0 に答える 0