암호 저장 체계를 안전하게 유지하는 가장 쉬운 방법 은 표준 라이브러리 를 사용하는 것 입니다.
보안은 대부분의 프로그래머가 단독으로 처리 할 수있는 것보다 훨씬 더 복잡하고 보이지 않는 스크류 업 가능성으로 인해 표준 라이브러리를 사용하는 것이 가장 쉽고 가장 안전한 옵션 일뿐입니다.
새로운 PHP 비밀번호 API (5.5.0+)
PHP 버전 5.5.0 이상을 사용하는 경우 새로운 단순화 된 비밀번호 해싱 API를 사용할 수 있습니다
PHP의 비밀번호 API를 사용하는 코드의 예 :
<?php
// $hash is what you would store in your database
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT, ['cost' => 12]);
// $hash would be the $hash (above) stored in your database for this user
$checked = password_verify($_POST['password'], $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
(여전히 레거시 5.3.7 이상을 사용하는 경우 내장 기능에 액세스 할 수 있도록 ircmaxell / password_compat 를 설치할 수 있습니다 )
소금에 절인 해시 개선 : 후추 추가
보안을 강화하려면 지금 보안 담당자 (2017)는 소금에 절인 암호 해시에 ' 후추 '를 추가 할 것을 권장 합니다.
Netsilik / PepperedPasswords
( github ) 는이 패턴을 안전하게 구현하는 클래스가 간단하고 좋습니다
.
MIT 라이센스와 함께 제공되므로 독점 프로젝트에서도 원하는대로 사용할 수 있습니다.
다음을 사용하는 코드 예 Netsilik/PepperedPasswords
:
<?php
use Netsilik/Lib/PepperedPasswords;
// Some long, random, binary string, encoded as hexadecimal; stored in your configuration (NOT in your Database, as that would defeat the entire purpose of the pepper).
$config['pepper'] = hex2bin('012345679ABCDEF012345679ABCDEF012345679ABCDEF012345679ABCDEF');
$hasher = new PepperedPasswords($config['pepper']);
// $hash is what you would store in your database
$hash = $hasher->hash($_POST['password']);
// $hash would be the $hash (above) stored in your database for this user
$checked = $hasher->verify($_POST['password'], $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
OLD 표준 라이브러리
참고 : 더 이상 필요하지 않아야합니다! 이것은 역사적인 목적으로 만 여기에 있습니다.
휴대용 PHP 암호 해싱 프레임 워크 : phpass를 살펴보고 CRYPT_BLOWFISH
가능한 경우 알고리즘 을 사용해야 합니다.
phpass (v0.2)를 사용하는 코드의 예 :
<?php
require('PasswordHash.php');
$pwdHasher = new PasswordHash(8, FALSE);
// $hash is what you would store in your database
$hash = $pwdHasher->HashPassword( $password );
// $hash would be the $hash (above) stored in your database for this user
$checked = $pwdHasher->CheckPassword($password, $hash);
if ($checked) {
echo 'password correct';
} else {
echo 'wrong credentials';
}
PHPass는 잘 알려진 일부 프로젝트에서 구현되었습니다.
- phpBB3
- bbPress뿐만 아니라 WordPress 2.5 이상
- Drupal 7 릴리스 (Drupal 5 및 6에 사용 가능한 모듈)
- 다른 사람
좋은 점은 세부 사항에 대해 걱정할 필요가 없다는 것입니다. 세부 사항은 경험이 많은 사람들이 프로그래밍했으며 인터넷의 많은 사람들이 검토했습니다.
암호 저장 체계에 대한 자세한 내용은 Jeff 의 블로그 게시물을 참조하십시오. 암호를 잘못 저장했을 수 있습니다
무엇 이건 당신이 '갈 경우 당신이 내가 그것을 자신을 감사합니다 '접근, 사용하지 않는 MD5
또는 SHA1
더 이상 . 그것들은 좋은 해싱 알고리즘이지만 보안상의 이유로 깨진 것으로 간주 됩니다. .
현재 CRYPT_BLOWFISH와 함께 crypt를 사용 하는 것이 가장 좋습니다.
PHP의 CRYPT_BLOWFISH는 Bcrypt 해시의 구현입니다. Bcrypt는 Blowfish 블록 암호를 기반으로하며 알고리즘을 느리게하기 위해 값 비싼 키 설정을 사용합니다.