hoch

PHP-Funktion: Passwort-Check bei haveibeenpwned.com

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:

  1. https://haveibeenpwned.com/
  2. haveibeenpwned.com - API
Artikel weiterempfehlen: Google + Facebook

Innovation Award Oktober 2016 für Klasse ahpwcheck

Ja sowas: mit 37.5 % der Stimmen abgeräumt :-)
Die Javascript-Klasse zählt in einem (Passwort-) Input-Feld Typen von Zeichen und ermittelt Grad der Erfüllung der Anforderungen, Gross- und Kleinschreibung, Ziffern, Sonderzeichen und Anzahl. Plus Mehrsprachigkeit und Callbackfunktion zum Abrunden.

2016-12-01-jsclasses-innovation-award-4-ahpwcheck.png

2016-12-01-jsclasses-innovation-award-4-ahpwcheck-email.png

Update:
Auf einen der gesponsorten Preise habe ich verzichtet. Damit können “richtige” oder angehende Programmierer mehr anfangen, als ich. Der Award gehört mir ja bereits - das reicht mir völlig aus :-)

weiterführende Links:

  1. jsclasses.org: ahpwcheck
  2. Github: Sourcen inkl. Beispiele
  3. axel-hahn.de: Docs
Artikel weiterempfehlen: Google + Facebook

Umstellung auf SSL

“Mein” Hoster bietet 1 kostenloses SSL Paket bei shared Hosting an (hätte man einen eigenen Host, könnte man ja ein Zertifikat mit Lets Encrypt installieren).

Das Zertifikat ist seit dieser Woche aktiv und ich habe nun einige Konfigurationen umgeschrieben und Anwendungen (Blog, Diashow, Dokumentationen) angepasst.
Ich glaube, jetzt läuft es. Im Wesentlichen.

Alle Aufrufe mit http werden daher auf https mittels .htaccess umgeleitet.

RewriteEngine on
RewriteBase /

# 2016-11-23 - force SSL :-)
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

Update:

Wenn eine Subdomain in einem Unterverzeichnis der Hauptdomain liegt (so werden bei Strato die zusätzlichen Domains abgelegt), dann kann man deren Hostnamen mit einem Regex prüfen und von der Umleitung aussliessen.

  • RewriteCond %{HTTP_HOST} !.*example\.com [NC]
    .* als Platzhalter für beliebige Zeichen: Domain mit allen Subdomains. Bei mehrenen Domains im Paket schreibt man pro Domain eine Zeile
  • RewriteCond %{HTTP_HOST} !^www1\.example\.com [NC]
    mit ^ beginnend genau diese Subdomain und Domain

In der .htaccess des Webroots der Haupdomain kann man schreiben:

RewriteEngine on
RewriteBase /

# force SSL
RewriteCond %{HTTP_HOST} !.*domain2\.de [NC]
RewriteCond %{HTTP_HOST} !.*domain3\.de [NC]
RewriteCond %{SERVER_PORT} 80 
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

weiterführende Links:

  1. letsencrypt.org (en)
  2. Axels Webseite: Diashows
  3. Axels Webseite: Dokumentationen (en)
Artikel weiterempfehlen: Google + Facebook

Was für ein Vorfall …

Ich habe eine E-Mail bekommen. Irgendein Arbogast Brock meint, mir unterstellen zu müssen, ich hätte zum Zeitpunkt XY mit IP irgendwas einen superdollen Film heruntergeladen.

2014-08-05-vorfall-download.png

Wie ich sowas liebe …

Ich war am 30.07.2014 im Urlaub - und es war keiner hier daheim - das MUSS also Unfug sein.

Die Anrede:
Arbogast weiss also nicht mal meinen Namen.

Die IP-Adresse:
72.91.170.240 - dazu kann man whois [IP-Adresse] aufrufen (unter Linux/ Mac ist es ein mitinstalliertes Kommandozeilentool - oder es gibt auch Webseiten, die diese Aufgabe lösen - einmal nach “whois” suchen).
Jedenfalls ist obiges eine IP der Fa. Verizon Online LLC in Ashburn (USA). Aha.
Wie dumm muss man sein, dass nicht einmal die IP des Landes des Angeschriebenen Opfers übereinstimmt?!
Arbogast weiss also nicht mal, wo ich eigentlich bin.

Der Anhang:
Im Anhang ist ein CAB-Archiv. Darin wiederum ist eine EXE-Datei.
Warum genau sollte ich nochmal eine EXE-Datei von einem unbekannten Absender - ohne eine angegebene Adresse öffnen?

Gesehen .. gelacht .. F8.

Artikel weiterempfehlen: Google + Facebook

Google Analytics wurde deaktiviert

Die da in Übersee sammeln doch schon genug Daten! Mehr als genug.

Als freundliche kleine Randnotiz zu eurer Kenntnisnahme darf ich hiermit verkünden:
Das Tracking mit Google Analytics wurde auf der Webseite www.axel-hahn.de und in meinem Blog gnadenlos gekickt. Weiterhin aktiv ist die Statistische Auswertung mit der Piwik Installation unter www.axel-hahn.de - also auf “meinem” Server in D.

Artikel weiterempfehlen: Google + Facebook