2012-05-13 2 views
2

데이터를 데이터베이스에 삽입하고 데이터가 인간에서 전송되었는지 확인하기 위해 양식을 만들었으며 이미 CI에 통합 된 보안 문자를 사용했습니다.CodeIgniter CAPTCHA 유효성 확인

$checkrules = array(
     'img_path' => realpath(APPPATH . '../upload/checking/img') . '/', 
     'img_url' => base_url() . 'upload/checking/img/', 
     'font_path' => realpath(APPPATH . '../upload/checking/font.ttf'), 
     'img_width' => 150, 
     'img_height' => 30, 
     'expiration' => 7200 
    ); 

    $check = create_captcha($checkrules); 
    $data['checkimg'] = $check['image']; 

    $this->form_validation->set_rules('name', 'Name', 'required|max_length[40]|xss_clean'); 
    $this->form_validation->set_rules('email', 'E-mail', 'required|valid_email|xss_clean'); 
    $this->form_validation->set_rules('website', 'Website', 'max_length[80]|prep_url|xss_clean'); 
    $this->form_validation->set_rules('comment', 'Comment', 'required|xss_clean'); 
    $this->form_validation->set_rules('check', 'Check', 'required|xss_clean'); 

    if ($this->form_validation->run() == FALSE) 
    { 
     $this->load->view('cms/theme', $data); 
    } 
    else 
    { 
     echo "success"; 
     $this->load->view('cms/theme', $data); 
    } 

내 질문은 이제 보안 문자를 확인하는 가장 좋은 방법은 무엇이다 :

이 내 컨트롤러?

) 1. 이미 작성한 콜백을 작성했지만 양식을 보낼 때 새로운 보안 문자 코드로 인해 오류가 발생하여 문제가 발생했습니다.

2.) CAPTCHA의 코드를 데이터베이스에 삽입하고 확인하십시오. 문제는 많은 데이터베이스를로드 할 것이고 매우 바쁠 것이기 때문입니다.

두 번째 질문입니다. 이 CAPTCHA는 .jpg 사진 만 폴더에 저장합니까 아니면 다른 형식 일 수 있습니까? (. 나는 그들이 사용 후이 보안 문자이기 삭제할 때문에이 부탁 해요)

답변

6
* Example of captcha validation without database useage 
* Instead of it used session to store captcha value 
* The images will be deleted after the use 

public function index() 
{ 
    $this->load->helper(array('form', 'url','captcha')); 
    $this->load->library('form_validation'); 

     $this->form_validation->set_error_delimiters('<div class="error">', '</div>'); 
     $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean'); 
     $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database'); 
     $this->form_validation->set_rules('captcha', 'Captcha', 'callback_validate_captcha'); 

    if($this->form_validation->run() == FALSE) 
     { 

     $original_string = array_merge(range(0,9), range('a','z'), range('A', 'Z')); 
     $original_string = implode("", $original_string); 
     $captcha = substr(str_shuffle($original_string), 0, 6); 

     //Field validation failed. User redirected to login page 
     $vals = array(
       'word' => $captcha, 
       'img_path' => './captcha/', 
       'img_url' => 'http://mycodeignitor.org/captcha/', 
       'font_path' => BASEPATH.'fonts/texb.ttf', 
       'img_width' => 150, 
       'img_height' => 50, 
       'expiration' => 7200 
     ); 

     $cap = create_captcha($vals); 
     $data['image'] = $cap['image']; 

     if(file_exists(BASEPATH."../captcha/".$this->session->userdata['image'])) 
      unlink(BASEPATH."../captcha/".$this->session->userdata['image']); 

     $this->session->set_userdata(array('captcha'=>$captcha, 'image' => $cap['time'].'.jpg')); 
     $this->load->view('index_index',$data); 
     } 
     else 
     { 
      if(file_exists(BASEPATH."../captcha/".$this->session->userdata['image'])) 
       unlink(BASEPATH."../captcha/".$this->session->userdata['image']); 

      $this->session->unset_userdata('captcha'); 
      $this->session->unset_userdata('image'); 
      redirect('home', 'refresh'); 
     } 



} 

public function validate_captcha(){ 
    if($this->input->post('captcha') != $this->session->userdata['captcha']) 
    { 
     $this->form_validation->set_message('validate_captcha', 'Wrong captcha code, hmm are you the Terminator?'); 
     return false; 
    }else{ 
     return true; 
    } 

} 
+0

안녕하세요, img_path는 저장하거나 코드를 작성해야합니다. 혼란스러워서 실제로 어떻게 작동할까요? –

+0

@Akhilraj N S : 나는 당신의 발걸음을 따라 갔지만 captha는 작동하지 않는 것으로 보이며 양식은 제출됩니다. 나는 당신의 콜백 함수를 그대로 사용했고 inseted도 시도했다 : if (0! == strcmp ($ this-> input-> post ('captcha'), $ this-> session-> userdata [ 'captcha' ]))하지만 모두 같은 효과가 있습니다. 그리고 마지막으로 폴더에서 이미지를 삭제하려고했지만 "unlink (전체 경로 \ captcha) : 권한이 거부되었습니다"라는 오류가 나타납니다. – Lykos

+0

@Deepanshu, img_path는 captcha 이미지를 저장할 폴더/디렉토리입니다. 해당 폴더를 만들어야합니다. 저장 될 이미지는 captcha를 통해 PHP로 생성 된 이미지입니다. – user1149244

0

나는 당신이 CodeIgniter의에서 쉽게 구현할 수있다 reCAPTCHA를을 사용하는 것이 좋습니다 : http://codeigniter.com/wiki/ReCAPTCHA

+0

예, 내 문제를 해결하는 것이 좋은 방법이지만 현재의 방식으로는 시스템에 통합 된 솔루션이 있어야하기 때문에 아닙니다. – user1257255

+0

통합 솔루션입니다. – bottleboot

+0

오프라인 모드로 작업하려고하면이 기능이 작동하지 않기 때문에 실제로는 그렇지 않습니다. – user1257255