Selbstverständlich gibt es Webseiten, auf denen du eine .htpasswd – Datei erstellen lassen kannst. Was aber, wenn du denen nicht traust? Vielleicht interessiert dich auch nur, wie so etwas geht.

Zunächst einmal müssen wir wissen, dass die hier stehenden Informationen nur auf einem Apache Webserver funktionieren werden. Warum? Weil der hier verwendete Verschlüsselungsalgorithmus in Apache integriert ist. Die Zugangsdaten, die wir eingeben, müssen auch vom Server gelesen entsprechend ausgewertet werden können. Dann ist es wichtig zu wissen, dass eine .htpasswd nicht .htpasswd heißen muss. Sie kann auch .abcdefghi heißen oder anders. Eurer Fantasie sind hierbei keine Grenzen gesetzt. In der .htaccess (die muss so heißen) wird der Pfad zur Passwortdatei (so werde wir die .htpasswd ab jetzt nennen) nämlich inklusive des Dateinamen eingegeben. Hier eine typische .htaccess

AuthType Basic
AuthName "Passwortgeschütztes Verzeichnis"
AuthUserFile /Pfad/Zur/Datei/.htpasswd
Require valid-user

Die Passwortdatei (.htpasswd) muss auch nicht im ersten Verzeichnis liegen, sondern kann versteckt in einem Unterverzeichnis ihr dasein fristen. Hierdurch entstehen zwei sicherheitsrelevante Vorteile:
1. ein potentieller Angreifer weiß nicht wo er suchen soll
2. er weiß nicht wie die Passwortdatei heisst (bei uns jedenfalls nicht .htpasswd)

Um also eine .htpasswd Datei zu erstellen müssen wir in PHP mit PASSWORD_BCRYPT das Passwort verschlüsseln. Dies ist der Standard seit Apache2.

$filenameIntern = './Verzeichnispfad/Zur/Datei/.htpasswd';
$newPassword = password_hash($_POST['password'], PASSWORD_BCRYPT);
$newEntry = $newUsername . ':' . $newPassword;
// Sichergehen, dass die Datei existiert und beschreibbar ist.
if (is_writable($filenameIntern)) {
// Wir öffnen $filename_intern im "Schreib" - Modus.
if (!$handle = fopen($filenameIntern, "w")) {
echo "Kann die Datei " . $filenameIntern . " nicht öffnen";
exit;
}
// Schreibe $newEntry in die geöffnete Datei.
if (!fwrite($handle, $newEntry)) {
echo  "Kann in die Datei " . $filenameIntern . " nicht schreiben";
exit;
}
echo "Ihre Änderung wurde übernommen!";
fclose($handle);

Die Datei wurde nun in unserem Wunschverzeichnis gespeichert. Wenn wir jetzt die .htaccess wie oben aufgeführt auf den Server kopieren, wird das Verzeichnis wo die .htaccess und alle darin befindlichen Unterverzeichnisse liegt, ab sofort nur noch über einen Benutzernamen und ein Passwort zu betreten sein.

Ist der Pfad AuthUserFile /Pfad/Zur/Datei/.htpasswd falsch angegeben dann erhält man folgende Fehlermeldung:

Internal Server Error.
The server encountered an internal error or misconfiguration and was unable to complete your request

Den Pfad für seine eigene Website bekommt man über PHP sehr einfach heraus. Dazu einfach die folgende Datei mit dem Dateinamen pfad.php erstellen und auf den eigenen Server hochladen und ausführen lassen (direkt in dem Unterverzeichnis wo die .htpasswd liegt):

<?php
echo $_SERVER['SCRIPT_FILENAME'];
?>

Wir erhalten dann eine Ausgabe wie /web197/www/htdocs/Verzeichnispfad/Zur/Datei/pfad.php
Diese Information kopiert Ihr dann und setzt sie in der .htaccess hinter AuthUserFile ein. Danach sollte alles wunschgemäß funktionieren.

Übrigens:
Solltet ihr schon eine .htaccess auf dem Server haben, könnt ihr diese einfach um die oben geschriebenen Zeilen erweitern, sofern diese in dem Verzeichnis liegt das ihr schützen wollt.