어떻게 해시 요소는 안전한 로그인에 zend framework?
-
20-09-2019 - |
문제
나는 보았다 예로 로그인 형태로 같은 날려드
class Form_Login extends Zend_Form {
//put your code here
public function init($timeout=360){
$this->addElement('hash', 'token', array(
'timeout' => $timeout
));
$this->setName('Login');
$username = $this->createElement ( 'text', 'username' );
$username->setLabel('user name:')
->setRequired();
$this->addElement($username);
$password=$this->createElement('password','password');
$password->setLabel('password:');
$password->setRequired();
$this->addElement($password);
$login=$this->createElement('submit','login');
$login->setLabel('Login');
$this->addElement($login);
$this->setMethod('post');
$this->setAction(Zend_Controller_Front::getInstance()->getBaseUrl().'/authentication/login');
}
}
에 submitAction
일부 코드가 동일
if (!$form->isValid($request->getPost())) {
if (count($form->getErrors('token')) > 0) {
return $this->_forward('csrf-forbidden', 'error');
}
$this->view->form = $form;
return $this->render('login');
}
지금,나의 질문에 무슨 이유로 사용하기 위해 해시의를 받으려면 어떻게 해야 합니까?는 방법을 이 해시 요소는 안전한 로그인을 하나요?
사람을 설명할 수 있습니까?
감사
해결책
Wikipedia 페이지에 그것을(크로스 사이트 요청의 위조).다만 픽업하에 표현의 문제입니다. It doesn't make It 보안,그것은 그냥 보호에 대한 유형의 공격합니다.
즉,누군가는 상태를 변경할 수 있습 서버에서 필요 없이 사용자가 페이지를 방문하여 브라우저는 Url 을 로드(중에 숨겨진 프레임이나 이미지 태그)을 이용자의 동의 없이 지식입니다.
이 경우에는 그에 대한 보호 로그인 CSRF.예 될 수 있는 로그를 피해자로 사용자 정의 google 계정이다.다음할 때 사용하여 검색이 계정에 액세스 할 수있을 것을 그들의 역사를 검색 할 수 있습니다.
결함에서 이러한 두 가지 방법입니다 그들은 아무 방법이 페이지에 액세스하려면 실제적인 양식이다.의 보호를 따라서 할당 해시 사용자에게도 그들은 방문의 로그인 페이지 제출하여 올바른 해쉬와 함께 다른 값입니다.
틀림없이 더 나은 방법에 대해 로그인 CSRF 을 확인하는 것입 Referer
헤더와 그것을 거절하지 않은 경우 올바른 또는 존재하지 않습니다.
다른 팁
설명의 설명을 참조하십시오 zend_form_element_hash 용 Zend Framework 매뉴얼:
이 요소는 양식에 대한 CSRF 공격으로부터 보호를 제공하여 Rogue 스크립트가 아닌 양식을 생성 한 사용자 세션에서 데이터를 제출하도록합니다. 보호는 양식에 해시 요소를 추가하고 양식이 제출 될 때 확인하여 달성됩니다.
Brute Force 스크립트는 자격 증명의 임의의 조합을 게시하여 토큰이 없으면 사이트에서 암호를 추측하려고 시도 할 수 있습니다. 그러나 해시가 세션에 저장되기 때문에 스푸핑 된 요청에는 세션 쿠키도 포함되어 있어야하므로 사이트를 공격하기가 어려워집니다.
따라서 로그인 페이지에는 호출되면 해시/토큰이 포함되어 있습니다. 이 토큰은 세션에 특정 수명 동안 저장됩니다. 사용자가 로그인하고 토큰이 로그인 자격 증명의 일부가 아닌 경우, 요청은 다른 서버에서 나오고 거부 된 것으로 가정합니다.
또한 참조하십시오 CSRF의 Wikipedia