저는 CodeIgniter 2.1.4 버전을 Ion Auth과 함께 사용하고 있으며 모든 것이 훌륭하게 작동했습니다. 어제, Ion Auth를 최신 버전으로 업데이트했는데 사용자 프로필을 "편집"하려고 할 때마다 CSRF 오류가 발생합니다.CodeIgniter 2, Ion Auth가 프로파일 편집시 CSRF 오류 메시지를 표시합니다.
"이 양식 게시물은 보안 검사를 통과하지 못했습니다."
controllers/auth.php
파일을 수정 한 후이 오류가 발생하여 다양한 이온 인증보기가 내 자신의 템플릿에로드됩니다. 결국, 내 사이트 디자인에 그것을 통합 할 수 없다면 무슨 소용이 있겠습니까? 그러나인데, auth.php
컨트롤러가 전혀 수정되지 않은 경우에도 Safari의 이전 버전에서이 오류가 발생합니다.
이것은 컨트롤러 파일 auth.php
에 대한 간단한 수정입니다.
$view_html = $this->template->load('default', $view, $this->viewdata, $render);
예, (/libraries/
에있는 Template.php
파일에서) 내 load
기능은 처음부터 잘 일하고있다 (많은
$view_html = $this->load->view($view, $this->viewdata, $render);
:
이 라인을 대체 몇달 전). 새로운 버전의 이온 인증을 사용하더라도 템플릿로드 기능이 작동하지만 ... 위에서 설명한 보안 오류가 계속 발생합니다.
일부 연구를 수행 한 후 오류의 원인은 Ion Auth의 CSRF 보안 루틴입니다. 이 두 함수는 auth.php
컨트롤러에서 호출되며 _valid_csrf_nonce()
함수가 false
을 반환 할 때마다 위의 오류를 표시합니다. 임시 (또는 영구적?) 해결 방법으로
function _get_csrf_nonce()
{
$this->load->helper('string');
$key = random_string('alnum', 8);
$value = random_string('alnum', 20);
$this->session->set_flashdata('csrfkey', $key);
$this->session->set_flashdata('csrfvalue', $value);
return array($key => $value);
}
function _valid_csrf_nonce()
{
if ($this->input->post($this->session->flashdata('csrfkey')) !== FALSE &&
$this->input->post($this->session->flashdata('csrfkey')) == $this->session->flashdata('csrfvalue'))
{
return TRUE; // <-- no error
}
else
{
return FALSE; // <-- error
}
}
, 나는 CodeIgniter의
config/config.php
파일의 라인 298에 "CSRF 보호"옵션을 활성화했습니다.
$config['csrf_protection'] = TRUE; // enabled CSRF protection
$config['csrf_token_name'] = 'csrf_test_name';
$config['csrf_cookie_name'] = 'csrf_cookie_name';
$config['csrf_expire'] = 7200;
은 그 때 나는 항상 함수에서
true
를 반환하여 이온 인증의 CSRF 보호를 억제.
function _valid_csrf_nonce()
{
return TRUE;
}
그러나, 난 정말 여기 근본 원인을 이해하고 싶다. 이전 브라우저를 사용하거나 자신의 템플릿에 Ion Auth 뷰를 넣으려는 이유만으로 이러한 CSRF 오류가 발생하는 이유는 무엇입니까? 모든 것이 동일한 도메인을 사용하는 동일한 서버에 있습니다.
(편집 :.. 예, CI session
라이브러리가 자동으로로드 분명히 모든 후, 로그인을 유지할 수 잘 작동되고있다), 나는 근본 원인에 도착했던 적이