CodeIgniter Stange 암호 암호화
-
21-12-2019 - |
문제
나는 CodeIgniter를 사용하고 사용자 등록을하려고 노력하고 있습니다.그리고 나는 이상한 일을 만났습니다.처음에는 암호 가치로 정확히 무엇을하고 있는지 알려줄 것입니다.
$password = stripslashes($password);
$password = htmlspecialchars($password);
$password = md5($password);
$password = strrev($password);
.
다음 DB :
에 저장하고 있습니다.$data = array(
'email' => $email,
'reg_type' => $reg_type,
'password' => $password
);
$this->CI->db->insert('user', $data);
.
및 어떤 암호가 입력 되든, 항상이 값을 저장합니다. e7248fce8990089e402b00f89dc8d14d
및 로그인 페이지 (암호화 코드가 동일)가 될 때, 다른 MD5 값을 반환합니다 (그리고 올바른 모양).
누군가가 왜 일어나는지와 그것을 해결하는 방법을 설명 할 수 있습니까?또는 다른 암호의 암호화 방법을 제안 할 수 있습니다.
고맙습니다.
해결책
빈 변수 :
E7248FCE8990089E402B00F89DC8D14D 은 빈 문자열의 역 해시입니다.
$ Password 변수가 비어 있으면 $_POST
코드가있는 버그가있을 수 있습니다.
복어 사용 :
의견에서 언급했듯이, md5()
를 더 이상 사용해서는 안됩니다.
PHP 5.5+가있는 경우 password_hash()
함수를 사용할 수 있습니다.
$password = password_hash($password, PASSWORD_BCRYPT);
post()
및 stripslashes()
대신 CodeIgniter htmlspecialchars()
기능을 사용하십시오.
예 :
//Get password from form
$password = $this->input->post('field_name', true); //adding true runs the XSS filter.
//Hash Password
$password = password_hash($password, PASSWORD_BCRYPT);
//Data Array
$data = array(
'email' => $email,
'reg_type' => $reg_type,
'password' => $password
);
//Save to DB
$this->CI->db->insert('user', $data);
.
편집 :
password_hash()
는 소유자의 Salting을 처리합니다.코드에서 추가 소금을 제거했습니다.(@martinstoeckli 댓글보기)