Pfad zur .htpasswd

In dem letzten Tutorial, zum Thema .htpasswd Generator, wird der htpasswd_path (der PfadZurDatei/.htpasswd) benötigt. Diesen könnt Ihr z.B. über die Paketinformationen Eures Webhosters herausfinden, oder über den nachfolgenden beschriebenen Weg.

Datei get_path.php

  • Erstellt Euch eine neue Datei mit dem Namen get_path.php.
  • Kopiert den nachfolgenden Code in die Datei.
  • Ladet die Datei in den Ordner auf Eurem Webspace, in dem später die .htpasswd abgespeichert wird.
  • Öffnet in Eurem Browser die Datei get_path.php und kopiert Euch den absoluten Pfad zu der späteren .htpasswd.
  • Diesen Pfad könnt Ihr dann in dem .htpasswd-Generator eingeben.
<?php
echo dirname(__FILE__);
?>

Viel Erfolg mit dem Codeschnipsel, Pfad zur .htpasswd.

.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!

Datenbank-Backup per PHP-Script

In diesem Tutorial erstellen wir eine PHP-Datei, mit der schnell und einfach ein Datenbankbackup erstellt werden kann. Diese ist bei einigen WebHostern gelegentlich sehr hilfreich, wenn diese keinen externen Link zu dem phpMyAdmin anbieten.

Erklärung:

  1. Datenbank-Einstellungen: Ersetzen Sie die Platzhalter $host, $username, $password und $database mit Ihren tatsächlichen Datenbank-Informationen.
  2. Backup-Ordner: Der Ordner backups/ wird verwendet, um die Backup-Dateien zu speichern. Sie können diesen Ordner nach Ihren Wünschen anpassen. Stellen Sie sicher, dass der Ordner beschreibbar ist.
  3. Dateiname: Der Dateiname für das Backup wird generiert, indem der Datenbankname und das aktuelle Datum und die Uhrzeit verwendet werden.
  4. mysqldump-Befehl: Der Befehl mysqldump wird verwendet, um die Datenbank zu exportieren. Er enthält die Datenbank-Einstellungen und den Ausgabedateinamen.
  5. Befehl ausführen: Die Funktion exec() führt den mysqldump-Befehl aus.
  6. Überprüfung: Das Skript überprüft, ob die Backup-Datei erstellt wurde, um den Erfolg des Backups zu bestätigen.

Sie sehen die fertigen Codezeilen für die Datei dann aus:

<?php

// Datenbank-Einstellungen
$host = 'localhost'; // Ihr Datenbank-Host
$username = 'your_username'; // Ihr Datenbank-Benutzername
$password = 'your_password'; // Ihr Datenbank-Passwort
$database = 'your_database'; // Der Name Ihrer Datenbank

// Ordner für Backups
$backup_dir = 'backups/';

// Erstelle den Ordner, falls er nicht existiert
if (!is_dir($backup_dir)) {
    mkdir($backup_dir);
}

// Dateiname für das Backup
$date = date('YmdHis');
$backup_file = $backup_dir . $database . '_' . $date . '.sql';

// Befehl für mysqldump
$command = "mysqldump -h $host -u $username -p$password $database > $backup_file";

// Führe den Befehl aus
exec($command);

// Überprüfe, ob das Backup erfolgreich erstellt wurde
if (file_exists($backup_file)) {
    echo "Datenbank-Backup erfolgreich erstellt: " . $backup_file;
} else {
    echo "Fehler beim Erstellen des Datenbank-Backups.";
}

?>

Anwendung:

  • Speichern Sie das Skript als sqlbackup.php in einem Ordner auf Ihrem Webserver.
  • Stellen Sie sicher, dass der Ordner backups/ im selben Verzeichnis wie das Skript existiert und beschreibbar ist.
  • Rufen Sie das Skript über Ihren Webbrowser auf (z.B. http://yourdomain.com/sqlbackup.php).

Wichtige Hinweise:

  • Sicherheit: Schützen Sie Ihr Skript und den Backup-Ordner, um unbefugten Zugriff zu verhindern (z.B. mittels .htaccess).
  • mysqldump: Stellen Sie sicher, dass das mysqldump-Tool auf Ihrem Server verfügbar ist.
  • Pfad: Möglicherweise müssen Sie den Pfad zu mysqldump im Befehl anpassen, falls er nicht im Systempfad enthalten ist.
  • Fehlerbehandlung: Das Skript enthält grundlegende Fehlerbehandlung. Sie können diese erweitern, um detailliertere Informationen zu erhalten.
  • Bei jedem Aufrufen der Datei sqlbackup.php wird ein Backup erstellt!

Erweiterungen der sqlbackup.php

1. Download-Link

Die sqlbackup.php Datei lässt sich noch um einige sinnvolle Features erweitern, wie etwa einem Download-Link für die zuletzt erstellte Backup-Datei:

// Überprüfe, ob das Backup erfolgreich erstellt wurde
if (file_exists($backup_file)) {
    echo "Datenbank-Backup erfolgreich erstellt: " . $backup_file . "<br>";

    // Generiere den Download-Link
    $download_link = '<a href="' . $backup_file . '">Backup herunterladen</a>';
    echo $download_link;
} else {
    echo "Fehler beim Erstellen des Datenbank-Backups.";
}

2. Größe der Backup-Datei

Größe: Wir können die Dateigröße des Backups anzeigen, bevor der Download-Link generiert wird.

	$filesize = filesize($backup_file);
	$filesize_mb = round($filesize / (1024 * 1024), 2);

3. um HTML und CSS erweitern

HTML-Struktur: Das Skript ist jetzt in eine grundlegende HTML-Struktur eingebettet.
CSS-Styling: CSS-Code wurde hinzugefügt, um das Layout zu zentrieren, einen Container mit Rahmen und Schatten zu erstellen und den Download-Link als Button zu gestalten.

<!DOCTYPE html>
<html>
<head>
    <title>Datenbank-Backup</title>
    <style>
        body {
            font-family: sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            background-color: #435165;
        }

        .container {
            background-color: #fff;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
            text-align: center;
        }
		.container h1 {
			text-align: center;
			color: #5b6574;
			font-size: 24px;
			padding: 20px 0 20px 0;
			border-bottom: 1px solid #dee0e4;
		}

        .button {
            display: inline-block;
            padding: 10px 20px;
            background-color: #4CAF50;
            color: white;
            text-decoration: none;
            border-radius: 5px;
        }
		.error-message {
			width: 100%;
			padding: 15px;
			margin-top: 20px;
			background-color: #e06c75;
			border: 0;
			font-weight: bold;
			color: #ffffff;
			transition: background-color 0.2s;
			color: #fff;
		}
        .backup-table {
            margin-top: 20px;
            width: 100%;
            border-collapse: collapse;
        }

        .backup-table th, .backup-table td {
            padding: 8px;
            border: 1px solid #ddd;
            text-align: left;
        }

        .backup-table th {
			background-color: #54585d;
			border: 1px solid #54585d;
			color: #ffffff;
        }
		a {
		color: #356fbb;	
		}
    </style>
</head>
<body>

<div class="container">
		<h1>Datenbank Backup-Datei</h1>
...
</div>
</body>
</html>

4. Backup-Liste in einer Tabelle

Die Backup-Liste in einer Tabelle mit einer Spalte für die Dateigröße (in MB) darstellt:

    // Liste aller Backups im Verzeichnis anzeigen
    $backups = glob($backup_dir . $database . '_*.sql');

    if (!empty($backups)) {
        echo '<table class="backup-table"><thead><tr><th>Dateiname</th><th>Größe (MB)</th><th>Download</th></tr></thead><tbody>';
        foreach ($backups as $backup) {
            $filesize_bytes = filesize($backup);
            $filesize_mb = round($filesize_bytes / (1024 * 1024), 2); // Größe in MB umrechnen
            echo '<tr><td>' . basename($backup) . '</td><td>' . $filesize_mb . '</td><td><a href="' . $backup . '">Download</a></td></tr>';
        }
        echo '</tbody></table>';
    }

5. Erstellungsdatum der Backups

Das Erstellungsdatum der Backups in der Tabelle anzeigt:

        // Erstellungsdatum aus dem Dateinamen extrahieren (Format: YYYYMMDDHHMMSS)
        $date_str = substr(basename($backup), strlen($database) + 1, 14);
        $date = DateTime::createFromFormat('YmdHis', $date_str);
        $formatted_date = $date->format('d.m.Y H:i:s');

6. sql, .zip oder .gzip

Eine aktualisierte Version des Skripts, die es Ihnen ermöglicht, das Backup-Format (.sql, .zip oder .gzip) in der Datei einzustellen

// Änderbar: Backup-Format (sql, zip oder gzip)
$backup_format = 'gzip';

// Komprimierung, falls erforderlich
if ($backup_format == 'zip') {
    $command = "zip $backup_file.zip $backup_file.sql";
    exec($command);
    unlink("$backup_file.sql"); // SQL-Datei nach dem Zippen löschen
    $backup_file .= '.zip';
} elseif ($backup_format == 'gzip') {
    $command = "gzip $backup_file.sql";
    exec($command);
    $backup_file .= '.sql.gz';
} else {
    $backup_file .= '.sql';
}

Download

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

sqlbackup.zip | (Dateigröße: 1,9 KiB, 61 Downloads)

Viel Erfolg bei der Verwendung des Datenbank-Backup-Skripts!