<?php session_start(); // Sitzung starten, um die Authentifizierung zu verwalten // Überprüfen, ob das Passwort gesendet wurde und korrekt ist if (isset($_POST['password']) && $_POST['password'] === 'demo') { $_SESSION['authenticated'] = true; // Authentifizierung erfolgreich, Sitzungsvariable setzen } // Überprüfen, ob der Benutzer bereits authentifiziert ist, sonst das Passwort-Eingabeformular anzeigen if (!isset($_SESSION['authenticated']) || !$_SESSION['authenticated']) { echo ' <!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Passwortschutz</title> <style> /* Globales CSS */ body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 0; } .container { max-width: 800px; margin: 0 auto; padding: 20px; background-color: #fff; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); margin-top: 100px; } h1 { text-align: center; color: #333; } form { text-align: center; margin-top: 20px; } input[type="password"] { padding: 10px; width: 100%; margin-top: 10px; box-sizing: border-box; border: 1px solid #ccc; border-radius: 5px; } input[type="submit"] { padding: 10px 20px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; transition: background-color 0.3s; margin-top: 10px; } input[type="submit"]:hover { background-color: #45a049; } /* Popup-Overlay */ #overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); display: flex; justify-content: center; align-items: center; } #password-popup { background-color: #333; padding: 20px; border-radius: 5px; color: #fff; } /* Ende des CSS */ </style> </head> <body> <div class="container"> <h1>Passwortschutz</h1> <!-- Popup-Overlay und Passwort-Formular --> <div id="overlay"> <div id="password-popup"> <form action="" method="post"> <label for="password">Passwort:</label><br> <input type="password" id="password" name="password"><br> <input type="submit" value="Einloggen"> </form> </div> </div> <!-- JavaScript für das Schließen des Popups bei Klick außerhalb des Formulars --> <script> document.addEventListener("DOMContentLoaded", function() { var overlay = document.getElementById("overlay"); overlay.addEventListener("click", function(event) { if (event.target === overlay) { overlay.style.display = "none"; } }); }); </script> </div> </body> </html>'; exit; // Die Ausführung hier stoppen, damit der Rest der Seite nicht angezeigt wird, bis das Passwort korrekt eingegeben wurde } // Datenbankverbindung herstellen include_once 'config/config.php'; include_once 'log.php'; // Logdatei einbinden // Backup durchführen und direkt verschlüsseln if (isset($_POST['backup'])) { $timestamp = date('Y-m-d_H-i-s'); // Eindeutiger Zeitstempel für die Dateinamen $backup_file = "backup/backup_$timestamp.sql"; // Backup-Datei im "backup/"-Ordner speichern $command = "mysqldump -u $username -p$password $database > $backup_file"; exec($command); // Backup erfolgreich erstellt if (file_exists($backup_file)) { // Backup-Datei verschlüsseln $encryption_key = "2Tj&wuWCUeMrSD%tWS%2fv&vDQdFTeUQ"; // Geheimen Schlüssel für die Verschlüsselung $input_file = $backup_file; // Backup-Datei, die verschlüsselt werden soll $output_file = "backup/encrypted_backup_$timestamp.txt"; // Verschlüsselte Ausgabedatei // Verschlüsselungsalgorithmus und Modus (z.B. AES-256-CBC) $encryption_algorithm = 'aes-256-cbc'; // Initialisierungsvektor für die Verschlüsselung (zufällig generieren oder festlegen) $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($encryption_algorithm)); // Verschlüsselung durchführen if ($encrypted_data = openssl_encrypt(file_get_contents($input_file), $encryption_algorithm, $encryption_key, 0, $iv)) { // Initialisierungsvektor (IV) der verschlüsselten Datei hinzufügen $encrypted_data_with_iv = $iv . $encrypted_data; // Verschlüsselte Daten in Ausgabedatei schreiben file_put_contents($output_file, $encrypted_data_with_iv); // Erfolgreiche Meldung mit Download-Link anzeigen $download_button = "<a href='$output_file' download class='download-button'>Download Backup</a>"; echo "<script>alert('Backup erfolgreich erstellt und verschlüsselt: Download Backup');</script>"; // Ereignis protokollieren logEvent('Backup erstellt und verschlüsselt', 'Backup', "Backup-Datei: $backup_file"); } else { echo "Fehler beim Erstellen und Verschlüsseln des Backups."; } } else { echo "Fehler beim Erstellen des Backups."; } } // Wiederherstellung durchführen if (isset($_POST['restore'])) { if (isset($_FILES['restore_file'])) { $restore_file = $_FILES['restore_file']['tmp_name']; // Backup-Datei entschlüsseln, bevor die Wiederherstellung durchgeführt wird $encryption_key = "2Tj&wuWCUeMrSD%tWS%2fv&vDQdFTeUQ"; // Geheimer Schlüssel für die Verschlüsselung $encryption_algorithm = 'aes-256-cbc'; $iv_size = openssl_cipher_iv_length($encryption_algorithm); $encrypted_data_with_iv = file_get_contents($restore_file); $iv = substr($encrypted_data_with_iv, 0, $iv_size); $encrypted_data = substr($encrypted_data_with_iv, $iv_size); $restored_data = openssl_decrypt($encrypted_data, $encryption_algorithm, $encryption_key, 0, $iv); // Temporäre Datei für die Wiederherstellung erstellen $temp_restore_file = 'temp_restore.sql'; file_put_contents($temp_restore_file, $restored_data); // Wiederherstellung durchführen $command = "mysql -u $username -p$password $database < $temp_restore_file"; exec($command); echo "<script>alert('Wiederherstellung erfolgreich abgeschlossen.');</script>"; // Ereignis protokollieren logEvent('Wiederherstellung durchgeführt', 'Wiederherstellung', "Wiederhergestellte Datei: $restore_file"); // Temporäre Datei löschen unlink($temp_restore_file); } else { echo "Datei für die Wiederherstellung nicht hochgeladen."; } } // Wiederherstellung aus ausgewähltem Backup durchführen if (isset($_POST['restore_from_selected'])) { $selected_backup = $_POST['selected_backup']; // Wiederherstellung durchführen $command = "mysql -u $username -p$password $database < $selected_backup"; exec($command); echo "<script>alert('Wiederherstellung erfolgreich abgeschlossen.');</script>"; // Ereignis protokollieren logEvent('Wiederherstellung ausgewähltes Backup durchgeführt', 'Wiederherstellung', "Ausgewählte Backup-Datei: $selected_backup"); } // Liste der letzten 10 Backups generieren $backup_files = glob('backup/encrypted_backup_*.txt'); // Nur nach verschlüsselten Backups suchen $backup_files = array_slice($backup_files, -10); // Die letzten 10 Backups auswählen ?> <!DOCTYPE html> <html lang="de"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Backup und Wiederherstellung</title> <style> /* Header CSS */ body { background-color: aliceblue; } .header { background-color: #333; color: #fff; padding: 20px 0; } .header-container { width: 80%; margin: 0 auto; display: flex; justify-content: space-between; align-items: center; } .header h1 { margin: 0; } .header nav ul { list-style-type: none; margin: 0; padding: 0; } .header nav ul li { display: inline; margin-right: 20px; } .header nav ul li:last-child { margin-right: 0; } .header nav ul li a { color: #fff; text-decoration: none; } /* Container CSS */ .container { width: 80%; margin: 0 auto; padding: 20px; background-color: #333; color: #fff; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); margin-top: 40px; } h1, h2 { text-align: center; } form { text-align: center; margin-top: 20px; } input[type="submit"] { padding: 10px 20px; background-color: #4CAF50; color: white; border: none; border-radius: 5px; cursor: pointer; transition: background-color 0.3s; } input[type="submit"]:hover { background-color: #45a049; } input[type="file"] { display: block; margin: 10px auto; } .download-button { display: block; margin-top: 20px; text-align: center; text-decoration: none; background-color: #4CAF50; color: white; padding: 10px 20px; border-radius: 5px; } .download-button:hover { background-color: #45a049; } /* Backup List Styles */ .backup-list { list-style: none; padding: 0; margin: 20px 0; } .backup-list li { background-color: #fff; padding: 10px; margin-bottom: 10px; border-radius: 5px; box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); } .backup-list li a { color: #333; text-decoration: none; font-weight: bold; } .backup-list li form { display: inline; } .backup-list li input[type="submit"] { background-color: #45a049; color: #fff; padding: 5px 10px; margin-left: 10px; transition: background-color 0.3s; } .backup-list li input[type="submit"]:hover { background-color: #45a049; } </style> </head> <body> <header class="header"> <div class="header-container"> <h1>Materialverwaltung</h1> <nav> <ul> <li><a href="index.php">Home</a></li> <li><a href="add_material_form.php">Artikel hinzufügen</a></li> <li><a href="article_overview.php">Artikel Übersicht</a></li> <li><a href="Material_chrome.zip">chrome Erweiterung</a></li> <li><a href="backup_restore.php">Backup</a></li> </ul> </nav> </div> </header> <div class="container"> <h1>Backup und Wiederherstellung</h1> <h2>Backup erstellen</h2> <form action="" method="post"> <input type="submit" name="backup" value="Backup erstellen"> </form> <?php if (isset($download_button)) echo $download_button; ?> <h2>Wiederherstellung durchführen</h2> <form action="" method="post" enctype="multipart/form-data"> <input type="file" name="restore_file" accept=".txt"> <input type="submit" name="restore" value="Wiederherstellung durchführen"> </form> <!-- Backup-Liste --> <h2>Letzte 10 verschlüsselte Backups</h2> <ul class="backup-list"> <?php foreach ($backup_files as $file): ?> <li> <a href="<?php echo $file; ?>"><?php echo basename($file); ?></a> <form action="" method="post"> <input type="hidden" name="selected_backup" value="<?php echo $file; ?>"> <input type="submit" name="restore_from_selected" value="Wiederherstellen"> </form> </li> <?php endforeach; ?> </ul> </div> </body> </html>