2017-03-11 9 views
0

다음 정규식을 사용하여 Kohana 응용 프로그램에 Auth를 사용하여 강력한 암호를 적용하려고합니다. 하나 이상의 대문자, 하나의 소문자, 하나의 숫자, 하나의 숫자, 영숫자 (특수 문자) 및 최소 8 자입니다. Rubular에서 볼 수 있듯이 Kohana Auth에서 강력한 암호 적용

^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$ 

정규식

는 노력하고 있습니다. 다음은 Kohana의 Model_Auth_User에서 사용하는 코드이며 ORM까지 확장됩니다. 새 사용자 계정을 만들거나 기존의 암호를 변경할 때
public function rules() { 
    return array(
     'password' => array(
      array('not_empty'), 
      array('min_length', array(':value', 8)), 
      array('regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/')) 
     ) 
    ); 
} 

그러나,이 정규식은 완전히 무시 될 것으로 보인다. 위의 줄에서 min_length은 잘 작동합니다!

test은 암호가 8 문자 미만이므로 사용하지 못하지만, testing123은 어떤 종류의 오류 메시지도 표시하지 않습니다.

왜 이런 일이 발생하고 그 방법이 있습니까?

+0

암호를 해시로 저장 하시겠습니까? 기억한다면 ORM 규칙이 REQUEST 값이 아닌 데이터베이스 값에 적용됩니다. – bato3

+0

@ bato3 예, 암호가 해시되었습니다. 암호 유효성 검사는 암호화되기 전에 POST 값에서 실행됩니다. – SigmaSteve

+0

나는 이것을 안다. 왜 코드가 작동하지 않는지 설명하려고합니다. 추가 유효성 검사없이'save'를 사용하면 내부 값을 사용할 수 있습니다. 이것은'set' 메소드에서 해시되었습니다. 따라서 추가 유효성 검사 초기화 원시 (POST) 값을 사용해야합니다. https://kohanaframework.org/3.3/guide-api/Model_Auth_User#filters, [#set] (https://kohanaframework.org/3.3/guide-api/Model_Auth_User#save), [#create] (https ://kohanaframework.org/3.3/guide-api/Model_Auth_User#create) – bato3

답변

1

알아 낸 - 동일한 모델에서 get_password_validation 함수에 정규식을 추가해야합니다. 그렇지 않으면 오류 메시지가 출력되지 않습니다. 추가 한 경우

public static function get_password_validation($values) { 
    return Validation::factory($values) 
     ->rule('password', 'min_length', array(':value', 8)) 
     ->rule('password', 'regex', array(':value', '/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[^A-Za-z0-9]).{8,}$/')) 
     ->rule('password_confirm', 'matches', array(':validation', ':field', 'password')); 
} 

rules() 함수의 정규식 제거해야 또는 그것이 특수 문자를 포함하지 않는 해시 문자열에 정규식 검사를 실행로 로그인 할 수 없습니다.

희망이 있으면 도움이됩니다.