Anbei eine Funktion, die mit der API von haveibeenpwned.com ein Passwort prüft, ob dieses als gehackt gilt.
Wenn die Funktion true zurückliefert, wurde das Passwort gefunden (sprich: wurde gehackt). Diese Funktion kann man z.B. in einer Applikation einbauen, wenn man Benutzer ihr Passwort setzen lässt. Wenn die Funktion true liefert, dann wäre die Benutzereingabe als unsicher zurückzuweisen.
/**
* check password in an online database; it returns true if the password
* was found in the database
*
* @see https://haveibeenpwned.com/API/v2
* @param string $sPassword password to check
* @param boolean $bShowDebug show debug infos or not (default: false)
* @return boolean
*/
function haveibeenpwned($sPassword, $bShowDebug=false){
// — make the request
$sCheckPwUrl=’https://haveibeenpwned.com/api/pwnedpassword/’.sha1($sPassword).’?originalPasswordIsAHash=true’;
$context = stream_context_create($opts);
$sPwReturn = file_get_contents(
$sCheckPwUrl, false,
stream_context_create(
array(
”http” => array(
”method” => ”GET”,
”header” => ”User-Agent: php-check-4-my-password\r\nAccept: application/vnd.haveibeenpwned.v2+json\r\n”
)
)
)
);
$aRespHeader=$http_response_header;
echo $bShowDebug ? ’<pre>’.$sCheckPwUrl.’
‘
. ’Header: ’.print_r($aRespHeader, 1).’
‘
. ’$sPwReturn = ’.$sPwReturn.’
‘
.’</pre>’ : '’ ;
// — check result
$bFound=array_search(’HTTP/1.1 200 OK’, $aRespHeader)!==false;
echo $bShowDebug ? (
$bFound ? ’ERROR: The password was found in the database :-/’
: ’OK: seems not to been hacked yet :-)’
) : '’;
return $bFound;
}
weiterführende Links: