Level 2 – Einfache Serververwaltung (Minimal): Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 75: | Zeile 75: | ||
== Datei: index.php (Level 1 + minimale Ergänzung) == | == Datei: index.php (Level 1 + minimale Ergänzung) == | ||
| − | + | <nowiki><?php</nowiki> | |
| − | + | <span style="color:red;"><nowiki>session_start();</nowiki></span> | |
| − | < | + | <nowiki>include 'db.php';</nowiki> |
| − | <?php | + | <nowiki>$result = $conn->query("SELECT * FROM server");</nowiki> |
| − | session_start(); | + | <nowiki>?></nowiki> |
| − | include 'db.php'; | + | |
| − | $result = $conn->query("SELECT * FROM server"); | + | <nowiki><!DOCTYPE html></nowiki> |
| − | ?> | + | <nowiki><html></nowiki> |
| − | + | <nowiki><head></nowiki> | |
| − | <!DOCTYPE html> | + | <nowiki><meta charset="UTF-8"></nowiki> |
| − | <html> | + | <nowiki><title>Serververwaltung</title></nowiki> |
| − | <head> | + | <nowiki></head></nowiki> |
| − | <meta charset="UTF-8"> | + | <nowiki><body></nowiki> |
| − | <title>Serververwaltung</title> | + | |
| − | </head> | + | <span style="color:red;"><nowiki><?php</nowiki></span> |
| − | <body> | + | <span style="color:red;"><nowiki>if (isset($_SESSION['user'])) {</nowiki></span> |
| − | + | <span style="color:red;"><nowiki> echo "Eingeloggt als: " . $_SESSION['user'] . "<br>";</nowiki></span> | |
| − | < | + | <span style="color:red;"><nowiki>} else {</nowiki></span> |
| − | < | + | <span style="color:red;"><nowiki> echo "<a href='login.html'>Login</a><br>";</nowiki></span> |
| − | < | + | <span style="color:red;"><nowiki>}</nowiki></span> |
| − | if (isset($_SESSION['user'])) { | + | <span style="color:red;"><nowiki>?></nowiki></span> |
| − | + | ||
| − | } else { | + | <nowiki><h2>Neuen Server eintragen</h2></nowiki> |
| − | + | <nowiki><form method="post" action="add.php"></nowiki> | |
| − | } | + | <nowiki> Rechnername: <input type="text" name="rechnername" required><br></nowiki> |
| − | ?> | + | <nowiki> IP-Adresse: <input type="text" name="ip_adresse" required><br></nowiki> |
| − | </ | + | <nowiki> Betriebssystem: <input type="text" name="betriebssystem" required><br></nowiki> |
| − | + | <nowiki> Festplatte (GB): <input type="number" name="festplattenspeicher" required><br></nowiki> | |
| − | <h2>Neuen Server eintragen</h2> | + | <nowiki> RAM (GB): <input type="number" name="ram" required><br></nowiki> |
| − | <form method="post" action="add.php"> | + | <nowiki> Hauptdienst: <input type="text" name="hauptdienst" required><br></nowiki> |
| − | + | <nowiki> <input type="submit" value="Speichern"></nowiki> | |
| − | + | <nowiki></form></nowiki> | |
| − | + | ||
| − | + | <nowiki><h2>Serverliste</h2></nowiki> | |
| − | + | ||
| − | + | <nowiki><?php</nowiki> | |
| − | + | <nowiki>if ($result->num_rows > 0) {</nowiki> | |
| − | </form> | + | <nowiki> echo "<table border='1'>";</nowiki> |
| − | + | <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> | |
| − | <h2>Serverliste</h2> | + | |
| − | + | <nowiki> while ($row = $result->fetch_assoc()) {</nowiki> | |
| − | <?php | + | <nowiki> echo "<tr>";</nowiki> |
| − | if ($result->num_rows > 0) { | + | <nowiki> echo "<td>".$row["id"]."</td>";</nowiki> |
| − | + | <nowiki> echo "<td>".$row["rechnername"]."</td>";</nowiki> | |
| − | + | <nowiki> echo "<td>".$row["ip_adresse"]."</td>";</nowiki> | |
| − | + | <nowiki> echo "<td>".$row["betriebssystem"]."</td>";</nowiki> | |
| − | + | <nowiki> echo "<td>".$row["festplattenspeicher"]."</td>";</nowiki> | |
| − | + | <nowiki> echo "<td>".$row["ram"]."</td>";</nowiki> | |
| − | + | <nowiki> echo "<td>".$row["hauptdienst"]."</td>";</nowiki> | |
| − | + | <nowiki> echo "</tr>";</nowiki> | |
| − | + | <nowiki> }</nowiki> | |
| − | + | ||
| − | + | <nowiki> echo "</table>";</nowiki> | |
| − | + | <nowiki>} else {</nowiki> | |
| − | + | <nowiki> echo "Keine Server vorhanden.";</nowiki> | |
| − | + | <nowiki>}</nowiki> | |
| − | + | <nowiki>?></nowiki> | |
| − | + | ||
| − | + | <nowiki></body></nowiki> | |
| − | } else { | + | <nowiki></html></nowiki> |
| − | |||
| − | } | ||
| − | ?> | ||
| − | |||
| − | </body> | ||
| − | </html> | ||
| − | </ | ||
== Schutz von Funktionen == | == Schutz von Funktionen == | ||
Version vom 24. März 2026, 19:42 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
```
Anpassung: index.php
- Anzeige, ob ein Benutzer eingeloggt ist
Datei: index.php (Level 1 + minimale 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> <?php if (isset($_SESSION['user'])) { echo "Eingeloggt als: " . $_SESSION['user'] . "<br>"; } else { echo "<a href='login.html'>Login</a><br>"; } ?> <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