내가 사용할 비밀번호가 해킹되었는지 확인 정보
내가 사용할 비밀번호가 해킹되었는지 확인본문
아래 코드를 사용하시면,
회원가입이나 비밀번호 변경 전 내 비밀번호가 해킹되었는지 알 수 있습니다.
<?php
if(!function_exists("is_hacked_password")) {
function is_hacked_password($pw) {
// get first 8 characters from hashed password
$prefix = substr(sha1($pw), 0, 8); // 해시 후 처음 8자리만 가져옴
// get hashed table API (free)
$url = "https://exts.kr/api.hackedpw.json?prefix=" . $prefix;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$response = json_decode(curl_exec($ch));
// is it hacked?
if($response->success == true) {
// return $response->data->count; // 유출된 횟수를 가져올 때
return $response->data->hacked; // 참 또는 거짓을 가져올 때
} else {
return "unknown";
}
}
}
$password = "1234"; // 판단할 비밀번호 입력
$hacked = is_hacked_password($password);
if($hacked == true) {
echo "이 비밀번호는 해킹되었습니다. 다른 비밀번호를 사용하세요.";
} else {
echo "이 비밀번호는 안전합니다.";
}?>
0
댓글 8개
저 API가 믿을만한 사람이 운영하는건가요?
뭐 이건 해킹 해주세요 하는거죠
달랑 substr(sha1($pw), 0, 8) 결과만 전송해 한번이라도 유출된 비밀번호인지 확인하는 방법으로 괜찮은데 말이죠.
만약 해시 일부값 전송도 불안하다면 직접 구축하는 방법도 있습니다.
한 곳 소개합니다.
- https://haveibeenpwned.com/Passwords
> https://www.troyhunt.com/introducing-306-million-freely-downloadable-pwned-passwords/
* 기타 생략
페이지 하단 제공되는 파일들을 보면 아시겠지만, 문제는 용량이 무척 크다는 것입니다. 대략 10GB.
단순한 웹 호스팅 사용자면 사용이 힘들겠죠?
DB 무제한이라 하더라도 약 10GB인데 호스팅사에서 허용을 할지도 문제겠고요.
구축을 해도 효율적인 조회 처리가 기다리고 있겠네요. (개인적으로 배보다 배꼽이 큰 것 같습니다.)
어차피 회원 가입 시 한 번, 회원 정보(비밀번호) 변경 시 한 번 사용으로
사용 빈도가 낮은데도 불구하고 외부 서비스 이용이 찝찝하다, 직접 구축도 힘들다,
그래도 뭔가 안전한 비밀번호인지 확인하고 싶다면
구관이 명관이라고 비록 올드하지만 유용한 비밀번호 검사 방법을 추천합니다.
- 너무 짧게 입력되었는지 (긴 문자열은 괜찮습니다. 다른 이야기는 생략)
- 1111, aaaa처럼 지정 개수 이상 동일한 문자가 입력되었는지
- 1234(4321), abcd(dcba)처럼 처럼 지정 개수 이상 순차적으로 입력된 문자가 있는지
- qwer(rewq), poiu(uiop)처럼 자판에서 순서대로 입력된 문자가 있는지 (구현 방법 다양 - 생략)
- 숫자, 영문(대소문자), 특수문자 등 얼마나 조합되어 입력되었는지
등등을 검사해주는 방법이죠.
대충 이 정도만 검사해도 충분할 것 같지 않나요?