Level 2 – Einfache Serververwaltung (Minimal): Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 97: | Zeile 97: | ||
<nowiki>if ($result->num_rows > 0) {</nowiki> | <nowiki>if ($result->num_rows > 0) {</nowiki> | ||
echo "<table border='1'>"; | echo "<table border='1'>"; | ||
| − | + | <nowiki>echo "<tr><th>ID</th><th>Name</th><th>IP</th><th>OS</th><th>Disk</th><th>RAM</th><th>Dienst</th></tr>";</nowiki> | |
while ($row = $result->fetch_assoc()) { | while ($row = $result->fetch_assoc()) { | ||
Version vom 24. März 2026, 19:19 Uhr
Level 2 – Benutzerverwaltung und erste Sicherheitsprobleme
Voraussetzung
- Level 1 muss vollständig umgesetzt und funktionsfähig sein
- Die Serververwaltung ist erreichbar unter:
http://SERVER-IP/
Ziel
- Einführung einer einfachen Benutzeranmeldung
- Schutz von Funktionen (Eintragen/Löschen)
- Aufzeigen von Sicherheitsproblemen (SQL Injection)
Erweiterung der Datenbank
- Anmeldung an MariaDB
mysql -u root
- Datenbank auswählen
use serververwaltung;
- Tabelle für Benutzer anlegen
create table benutzer ( id int auto_increment primary key, benutzername varchar(50), passwort varchar(50) );
- Beispielbenutzer anlegen
insert into benutzer values (null, 'admin', 'admin'); insert into benutzer values (null, 'user', 'user');
PHP Sessions
Datei: login.html
- Einfaches Login-Formular für Benutzer
- Sendet die Daten per POST an login.php
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Login</title> </head> <body> <h2>Login</h2> <form method="post" action="login.php"> Benutzername: <input type="text" name="benutzername"><br> Passwort: <input type="password" name="passwort"><br> <input type="submit" value="Login"> </form> </body> </html>
Datei: login.php
- Prüft Benutzername und Passwort gegen die Datenbank
- Setzt eine Session bei erfolgreichem Login
<?php
include 'db.php';
$result = $conn->query("SELECT * FROM server");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Serververwaltung</title>
</head>
<body>
<h2>Neuen Server eintragen</h2>
<form method="post" action="add.php">
Rechnername: <input type="text" name="rechnername" required>
IP-Adresse: <input type="text" name="ip_adresse" required>
Betriebssystem: <input type="text" name="betriebssystem" required>
Festplatte (GB): <input type="number" name="festplattenspeicher" required>
RAM (GB): <input type="number" name="ram" required>
Hauptdienst: <input type="text" name="hauptdienst" required>
<input type="submit" value="Speichern">
</form>
<h2>Serverliste</h2>
<?php
if ($result->num_rows > 0) {
echo "
"; echo "<tr><th>ID</th><th>Name</th><th>IP</th><th>OS</th><th>Disk</th><th>RAM</th><th>Dienst</th></tr>"; while ($row = $result->fetch_assoc()) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } echo "| ".$row["id"]." | ".$row["rechnername"]." | ".$row["ip_adresse"]." | ".$row["betriebssystem"]." | ".$row["festplattenspeicher"]." | ".$row["ram"]." | ".$row["hauptdienst"]." |
";
} else {
echo "Keine Server vorhanden.";
}
?>
</body>
</html>
Anpassung: index.php
- Anzeige, ob ein Benutzer eingeloggt ist
Datei: index.php (Level 1 + minimale Ergänzung)
Datei: index.php (Level 1 + sichtbare Ergänzung)
<?php
session_start();
include 'db.php';
$result = $conn->query("SELECT * FROM server");
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Serververwaltung</title>
</head>
<body>
<!-- NEU: LOGIN-STATUS (farblich hervorgehoben) -->
<div style="background-color: yellow; padding: 5px;">
<?php
if (isset($_SESSION['user'])) {
echo "Eingeloggt als: " . $_SESSION['user'] . "<br>";
} else {
echo "<a href='login.html'>Login</a><br>";
}
?>
</div>
<h2>Neuen Server eintragen</h2>
<form method="post" action="add.php">
Rechnername: <input type="text" name="rechnername" required><br>
IP-Adresse: <input type="text" name="ip_adresse" required><br>
Betriebssystem: <input type="text" name="betriebssystem" required><br>
Festplatte (GB): <input type="number" name="festplattenspeicher" required><br>
RAM (GB): <input type="number" name="ram" required><br>
Hauptdienst: <input type="text" name="hauptdienst" required><br>
<input type="submit" value="Speichern">
</form>
<h2>Serverliste</h2>
<?php
if ($result->num_rows > 0) {
echo "<table border='1'>";
echo "<tr><th>ID</th><th>Name</th><th>IP</th><th>OS</th><th>Disk</th><th>RAM</th><th>Dienst</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr>";
echo "<td>".$row["id"]."</td>";
echo "<td>".$row["rechnername"]."</td>";
echo "<td>".$row["ip_adresse"]."</td>";
echo "<td>".$row["betriebssystem"]."</td>";
echo "<td>".$row["festplattenspeicher"]."</td>";
echo "<td>".$row["ram"]."</td>";
echo "<td>".$row["hauptdienst"]."</td>";
echo "</tr>";
}
echo "</table>";
} else {
echo "Keine Server vorhanden.";
}
?>
</body>
</html>
Schutz von Funktionen
- Eintragen und Löschen nur für eingeloggte Benutzer erlauben
Anpassung: add.php
<?php
include 'db.php';
session_start();
if (!isset($_SESSION['user'])) {
die("Nicht eingeloggt");
}
?>
Neue Datei: delete.php
- Löscht einen Server über die ID (unsicher!)
<?php
include 'db.php';
session_start();
if (!isset($_SESSION['user'])) {
die("Nicht eingeloggt");
}
$id = $_GET['id'];
$sql = "DELETE FROM server WHERE id = $id";
if ($conn->query($sql)) {
echo "Server gelöscht";
} else {
echo "Fehler";
}
?>
Anpassung: index.php (Löschfunktion)
- Erweiterung der Tabelle um eine Löschfunktion
echo "<td><a href='delete.php?id=".$row["id"]."'>löschen</a></td>";
Test
- Login aufrufen
http://SERVER-IP/server/login.html
- Mit admin/admin anmelden
- Server eintragen
- Server löschen testen
Sicherheitsprobleme (bewusst eingebaut)
SQL Injection im Login
- Eingabe im Login-Feld:
' OR 1=1 --
- Ergebnis:
- Login funktioniert ohne gültige Zugangsdaten
SQL Injection beim Löschen
- URL manipulieren:
http://SERVER-IP/server/delete.php?id=1 OR 1=1
- Ergebnis:
- Alle Datensätze werden gelöscht
Klartext-Passwörter
- Passwörter werden unverschlüsselt gespeichert
- Jeder mit Datenbankzugriff kann sie lesen
Ergebnis
- Teilnehmer erkennen:
- Login ≠ Sicherheit
- Unsichere SQL-Abfragen sind gefährlich
- Eingaben dürfen nicht ungeprüft verarbeitet werden