.htpasswd Generator

Zum Schutz von wichtigen und sensiblen Dateien im Internet wird sehr gern auf die Verwendung von htaccess und htpasswd zurückgegriffen. Mittels dieser beiden Dateien ist ein Passwortbasierter Schutz von Verzeichnissen schnell möglich. Damit Ihr dafür nicht zwangsläufig auf den Dienst von Webseiten zurückgreifen möchtet, erstellen wir mit diesem Tutorial einen solchen Schutz mittels htpasswd-Datei.

Was benötigen wir?

  • Wir benötigen ein Formular um Benutzernamen und Passwort einzugeben, sowie den Pfad zu der htpasswd-Datei (wo sie später abgespeichert wird).
  • Es soll eine Verschlüsselungsmethode für das Passwort ausgewählt werden.
  • Der generierte Code soll ausgegeben und ggf. zum Download angeboten werden.
  • Es soll alles in einer Datei abgearbeitet werden.

Formular

Wir erstellen uns ein HTML-Formular, das uns die Eingabe von Benutzername, Passwort und Auswahl der Verschlüsselungsmethode ermöglicht.

<!DOCTYPE html>
<html>
<head>
    <title>htpasswd Generator</title>
</head>
<body>
    <h1>htpasswd Generator</h1>
    <form method="post">
        <label for="username">Benutzername:</label>
        <input type="text" name="username" id="username" required><br><br>

        <label for="password">Passwort:</label>
        <input type="password" name="password" id="password" required><br><br>

        <label for="encryption">Verschlüsselung:</label>
        <select name="encryption" id="encryption">
            <option value="md5">MD5</option>
            <option value="crypt">CRYPT</option>
            <option value="sha">SHA</option>
        </select><br><br>

        <button type="submit">Generieren</button>
    </form>
</body>
</html>

Verarbeitung

  • Wir erstellen die Funktion generateHtpasswd, für $username, $password, $encryption.
  • Das PHP-Skript prüft, ob das Formular gesendet wurde, ruft die eingegebenen Werte ab und Funktion generateHtpasswd() wird aufgerufen, um den htpasswd-Code zu generieren.
<?php
function generateHtpasswd($username, $password, $encryption) {
    switch ($encryption) {
        case 'md5':
            $hashedPassword = md5($password);
            break;
        case 'crypt':
            $hashedPassword = crypt($password);
            break;
        case 'sha':
            $hashedPassword = '{SHA}' . base64_encode(sha1($password, true));
            break;
        default:
            return "Ungültige Verschlüsselungsmethode.";
    }

    return $username . ':' . $hashedPassword;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $encryption = $_POST['encryption'];

    $htpasswdLine = generateHtpasswd($username, $password, $encryption);
}
?>

Ausgabe

Wenn $htpasswdLine gesetzt ist, wird der generierte Code in einem <pre>-Tag angezeigt, um die Formatierung beizubehalten.

    <?php if (isset($htpasswdLine)): ?>
        <h2>Generierter htpasswd-Code:</h2>
        <pre><?php echo $htpasswdLine; ?></pre>
    <?php endif; ?>

zusätzliche Verschlüsselungsoptionen

  • Die Funktion generateHtpasswd() wurde um die Verschlüsselungsoptionen ’sha256′ und ’sha512′ erweitert, da diese beiden Varianten noch sicherer sind.
  • Achtung: Es kann sein, dass Eure Server diese beiden Verschlüsselungsoptionen nicht unterstützen!
function generateHtpasswd($username, $password, $encryption) {
    switch ($encryption) {
        case 'md5':
            $hashedPassword = md5($password);
            break;
        case 'crypt':
            $hashedPassword = crypt($password);
            break;
        case 'sha':
            $hashedPassword = '{SHA}' . base64_encode(sha1($password, true));
            break;
        case 'sha256':
            $hashedPassword = '{SHA-256}' . base64_encode(hash('sha256', $password, true));
            break;
        case 'sha512':
            $hashedPassword = '{SHA-512}' . base64_encode(hash('sha512', $password, true));
            break;
        default:
            return "Ungültige Verschlüsselungsmethode.";
    }

    return $username . ':' . $hashedPassword;
}

PfadZurDatei/.htpasswd

  • Dem Formular wurde ein neues Eingabefeld htpasswd_path hinzugefügt, in dem der Pfad zur .htpasswd-Datei eingegeben werden kann.
  • Der eingegebene Pfad wird in der Variablen $htpasswdPath gespeichert und um dann den absoluten Pfad zur .htpasswd-Datei zu erhalten und auszugeben.
        <label for="htpasswd_path">Pfad zur .htpasswd-Datei:</label>
        <input type="text" name="htpasswd_path" id="htpasswd_path" required><br><br>
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $encryption = $_POST['encryption'];
    $htpasswdPath = $_POST['htpasswd_path']; // Pfad zur .htpasswd-Datei

    $htpasswdLine = generateHtpasswd($username, $password, $encryption);

    // .htaccess-Inhalt generieren
    $htaccessContent = "AuthType Basic\n";
    $htaccessContent .= "AuthName \"Geschützter Bereich\"\n";
    $htaccessContent .= "AuthUserFile " . realpath($htpasswdPath) . "\n";
    $htaccessContent .= "Require valid-user\n";
}

Download-Buttons

  • Die Variablen $htpasswdDownloadLink und $htaccessDownloadLink werden erstellt, um Download-Links für die htpasswd und htaccess zu generieren.
  • Die data:-URI-Schema wird verwendet, um den Inhalt der Dateien direkt in den Links zu speichern.
  • rawurlencode() wird verwendet, um den Inhalt zu codieren, damit er sicher in der URI verwendet werden kann.
    // Download-Links generieren
    $htpasswdDownloadLink = 'data:text/plain;charset=utf-8,' . rawurlencode($htpasswdLine);
    $htaccessDownloadLink = 'data:text/plain;charset=utf-8,' . rawurlencode($htaccessContent);
    <?php if (isset($htpasswdLine)): ?>
        <h2>Generierter htpasswd-Code:</h2>
        <pre><?php echo $htpasswdLine; ?></pre>
        <a href="<?php echo $htpasswdDownloadLink; ?>" download=".htpasswd">.htpasswd herunterladen</a>

        <h2>Generierter .htaccess-Code:</h2>
        <pre><?php echo $htaccessContent; ?></pre>
        <a href="<?php echo $htaccessDownloadLink; ?>" download=".htaccess">.htaccess herunterladen</a>
    <?php endif; ?>

um CSS erweitern

Zum Schluss wird der ganze Code optisch noch etwas ansprechender gestaltet. Wir fügen den <style>-Code in den <head>-Bereich ein.

    <style>
body {
    font-family: sans-serif;
    display: flex;
	justify-content: center;
	align-items: center;
	min-height: 100vh;
	background-color: #555F79;
}
.generator {
  	width: 600px;
  	background-color: #ffffff;
  	box-shadow: 0 0 9px 0 rgba(0, 0, 0, 0.3);
  	margin: 100px auto;
}
.generator h1 {
  	text-align: center;
  	color: #5b6574;
  	font-size: 24px;
  	padding: 20px 0 20px 0;
  	border-bottom: 1px solid #dee0e4;
}
.generator h2 {
  	text-align: center;
  	color: #5b6574;
  	font-size: 24px;
  	padding: 20px 0 20px 0;
}
.generator h3 {
  	text-align: center;
  	color: #ffffff;
  	font-size: 24px;
}
.generator form {
  	display: flex;
  	flex-wrap: wrap;
  	justify-content: center;
  	padding-top: 20px;
}
.generator form label {
  	display: flex;
  	justify-content: center;
  	align-items: center;
  	width: 150px;
  	height: 50px;
  	background-color: #4878b6;
  	color: #ffffff;
}
.generator form input[type="password"], .generator form input[type="text"], .generator form select {
  	width: 410px;
  	height: 50px;
  	border: 1px solid #dee0e4;
  	margin-bottom: 20px;
  	padding: 0 15px;
}
.generator button {
  	width: 100%;
  	padding: 15px;
 	margin-top: 20px;
  	background-color:#4878b6;
  	border: 0;
  	cursor: pointer;
  	font-weight: bold;
  	color: #ffffff;
  	transition: background-color 0.2s;
}
.generator button:hover {
	background-color: #2868c7;
  	transition: background-color 0.2s;
}
pre {
  display: block;
  padding: 15px;
  @include font-size($code-font-size);
  color: $pre-color;
  border: 1px solid #dee0e4;

  // Account for some code outputs that place code tags in pre tags
  code {
    @include font-size(inherit);
    color: inherit;
    word-break: normal;
  }
}
		a {
		color: #356fbb;	
		padding: 15px;
		}
    </style>

So sieht das Script dann optisch aus:

Download

Hier könnt Ihr die vollständige htpasswd_generator.php kostenlos herunterladen und zum eigenen Gebrauch verwenden.

htpasswd_generator.php | (Dateigröße: 1,8 KiB, 53 Downloads)

Viel Erfolg bei der Verwendung des .htpasswd Generator-Skripts!

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert