PHP-Funktion: Passwort-Check bei haveibeenpwned.com
Mittwoch, 16. August, 2017
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.'<br>' . 'Header: '.print_r($aRespHeader, 1).'<br>' . '$sPwReturn = '.$sPwReturn.'<br>' .'</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: