Einfache Serververwaltung mit PHP und MySQL Verbesserung: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde geleert.)
Markierung: Geleert
 
(36 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Projekt: Einfache Serververwaltung mit PHP und MySQL =
 
  
== Ziel des Projekts ==
 
Dieses Projekt zeigt, wie eine einfache Serververwaltungs-Webseite aufgebaut wird. Dabei lernen die Teilnehmer die grundlegende Interaktion zwischen PHP, MySQL und einer Web-Oberfläche.
 
 
Die Webseite soll folgende Daten verwalten:
 
* Rechnername
 
* IP-Adresse mit Netzmaske
 
* Betriebssystem
 
* Festplattenspeicher
 
* RAM
 
* Hauptdienst
 
 
Zusätzlich wird eine Benutzerverwaltung integriert:
 
* Bestimmte Benutzer dürfen Daten eintragen, ändern und löschen
 
* Andere Benutzer dürfen nur Daten lesen
 
* Am Ende wird die Webseite mit HTTPS gesichert
 
 
== Verbesserungen in dieser Version ==
 
* **Passwort-Hashing:** Passwörter werden nun mit `password_hash()` gespeichert und mit `password_verify()` überprüft.
 
* **Löschfunktion mit Auswahl:** Administratoren können Server über eine Checkbox-Liste auswählen und löschen.
 
* **TLS-Absicherung:** Hinweise zur Aktivierung von HTTPS wurden ergänzt.
 
* **Session-Handling verbessert:** Verhinderung unautorisierter Zugriffe.
 
* **Bessere Fehlerbehandlung:** Fehlermeldungen wurden überarbeitet, um weniger Informationen preiszugeben.
 
* **Eingabevalidierung:** Schutz gegen SQL-Injections und unerwartete Eingaben.
 
 
== Installation der benötigten Pakete ==
 
Zuerst müssen die notwendigen Pakete installiert werden:
 
 
Pakete aktualisieren:
 
* '''apt update && apt upgrade -y'''
 
 
Benötigte Software installieren:
 
* '''apt install apache2 mariadb-server php php-mysql libapache2-mod-php -y'''
 
 
Apache und MariaDB starten und aktivieren:
 
* '''systemctl enable --now apache2 mariadb'''
 
 
Datenbank absichern:
 
* '''mysql_secure_installation'''
 
  (Fragen zur Absicherung beantworten und Root-Passwort setzen)
 
 
== Serverliste anzeigen ==
 
Dateiname: '''/var/www/html/liste.php'''
 
<pre>
 
<?php
 
include 'db.php';
 
session_start();
 
if (!isset($_SESSION["benutzername"])) {
 
    header("Location: login.html");
 
    exit;
 
}
 
$result = $conn->query("SELECT * FROM server");
 
if ($result->num_rows > 0) {
 
    echo "<form method='post' action='loeschen.php'>";
 
    echo "<table border='1'><tr><th>Löschen</th><th>ID</th><th>Rechnername</th><th>IP-Adresse</th><th>Betriebssystem</th><th>Festplatte (GB)</th><th>RAM (GB)</th><th>Hauptdienst</th></tr>";
 
    while($row = $result->fetch_assoc()) {
 
        echo "<tr><td><input type='checkbox' name='loeschen[]' value='" . $row["id"] . "'></td><td>" . $row["id"] . "</td><td>" . $row["rechnername"] . "</td><td>" . $row["ip_adresse"] . "</td><td>" . $row["betriebssystem"] . "</td><td>" . $row["festplattenspeicher"] . "</td><td>" . $row["ram"] . "</td><td>" . $row["hauptdienst"] . "</td></tr>";
 
    }
 
    echo "</table>";
 
    echo "<input type='submit' value='Ausgewählte Server löschen'></form>";
 
} else {
 
    echo "Keine Server gefunden.";
 
}
 
?>
 
</pre>
 
 
== Server löschen ==
 
Dateiname: '''/var/www/html/loeschen.php'''
 
<pre>
 
<?php
 
include 'db.php';
 
session_start();
 
if (!isset($_SESSION["benutzername"])) {
 
    header("Location: login.html");
 
    exit;
 
}
 
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["loeschen"])) {
 
    $ids = array_map('intval', $_POST["loeschen"]);
 
    if (!empty($ids)) {
 
        $sql = "DELETE FROM server WHERE id IN (" . implode(",", $ids) . ")";
 
        if ($conn->query($sql) === TRUE) {
 
            header("Location: liste.php");
 
            exit;
 
        } else {
 
            echo "Fehler beim Löschen.";
 
        }
 
    }
 
}
 
?>
 
</pre>
 
 
== Eingabevalidierung ==
 
**Warum ist Validierung notwendig?**
 
Ohne Validierung könnten Benutzer fehlerhafte oder bösartige Daten in die Datenbank eintragen. SQL-Injections oder ungewollte Zeichenketten könnten die Anwendung beschädigen oder kompromittieren.
 
 
**Wie wurde die Validierung implementiert?**
 
* Bei der Serverlöschung wird `intval()` verwendet, um sicherzustellen, dass nur numerische IDs verarbeitet werden.
 
* Bei der Anmeldung wurde `password_verify()` für eine sichere Passwortprüfung integriert.
 
* In `eintragen.php` werden nur erlaubte Zeichen für die Felder akzeptiert:
 
 
Dateiname: '''/var/www/html/eintragen.php'''
 
<pre>
 
<?php
 
include 'db.php';
 
session_start();
 
if (!isset($_SESSION["benutzername"])) {
 
    header("Location: login.html");
 
    exit;
 
}
 
if ($_SERVER["REQUEST_METHOD"] == "POST") {
 
    $rechnername = htmlspecialchars(trim($_POST["rechnername"]));
 
    $ip_adresse = filter_var($_POST["ip_adresse"], FILTER_VALIDATE_IP);
 
    $betriebssystem = htmlspecialchars(trim($_POST["betriebssystem"]));
 
    $festplattenspeicher = intval($_POST["festplattenspeicher"]);
 
    $ram = intval($_POST["ram"]);
 
    $hauptdienst = htmlspecialchars(trim($_POST["hauptdienst"]));
 
    if ($ip_adresse && $festplattenspeicher > 0 && $ram > 0) {
 
        $sql = "INSERT INTO server (rechnername, ip_adresse, betriebssystem, festplattenspeicher, ram, hauptdienst) VALUES ('$rechnername', '$ip_adresse', '$betriebssystem', '$festplattenspeicher', '$ram', '$hauptdienst')";
 
        if ($conn->query($sql) === TRUE) {
 
            header("Location: liste.php");
 
            exit;
 
        } else {
 
            echo "Fehler: " . $conn->error;
 
        }
 
    } else {
 
        echo "Ungültige Eingabe.";
 
    }
 
}
 
?>
 
</pre>
 
 
== TLS-Absicherung ==
 
Es wird empfohlen, HTTPS zu aktivieren, um die Verbindung abzusichern. Dies kann mit Let's Encrypt oder einem eigenen SSL-Zertifikat erfolgen.
 
 
== Fazit ==
 
Mit diesen Verbesserungen ist die Serververwaltung sicherer und funktionaler. Administratoren können nun Server über eine Checkbox auswählen und löschen, während Eingaben validiert werden, um Missbrauch zu verhindern.
 

Aktuelle Version vom 25. März 2025, 16:41 Uhr