Level 2 – Einfache Serververwaltung (Minimal): Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 62: | Zeile 62: | ||
== Datei: login.php == | == Datei: login.php == | ||
| + | * Prüft Benutzername und Passwort gegen die Datenbank | ||
| + | * Setzt eine Session bei erfolgreichem Login | ||
| + | |||
| + | <pre> | ||
| + | <?php | ||
| + | include 'db.php'; | ||
| + | session_start(); | ||
| + | |||
| + | $benutzername = $_POST['benutzername'];== Datei: login.php == | ||
* Prüft Benutzername und Passwort gegen die Datenbank | * Prüft Benutzername und Passwort gegen die Datenbank | ||
* Setzt eine Session bei erfolgreichem Login | * Setzt eine Session bei erfolgreichem Login | ||
| Zeile 71: | Zeile 80: | ||
$benutzername = $_POST['benutzername']; | $benutzername = $_POST['benutzername']; | ||
| + | $passwort = $_POST['passwort']; | ||
| + | |||
| + | $sql = "SELECT * FROM benutzer WHERE benutzername='$benutzername' AND passwort='$passwort'"; | ||
| + | $result = $conn->query($sql); | ||
| + | |||
| + | if ($result->num_rows == 1) { | ||
| + | $_SESSION['user'] = $benutzername; | ||
| + | header("Location: index.php"); | ||
| + | } else { | ||
| + | echo "Login fehlgeschlagen"; | ||
| + | } | ||
| + | ?> | ||
| + | </pre> | ||
$passwort = $_POST['passwort']; | $passwort = $_POST['passwort']; | ||
Version vom 24. März 2026, 18:49 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');
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';
session_start();
$benutzername = $_POST['benutzername'];== Datei: login.php ==
* Prüft Benutzername und Passwort gegen die Datenbank
* Setzt eine Session bei erfolgreichem Login
<pre>
<?php
include 'db.php';
session_start();
$benutzername = $_POST['benutzername'];
$passwort = $_POST['passwort'];
$sql = "SELECT * FROM benutzer WHERE benutzername='$benutzername' AND passwort='$passwort'";
$result = $conn->query($sql);
if ($result->num_rows == 1) {
$_SESSION['user'] = $benutzername;
header("Location: index.php");
} else {
echo "Login fehlgeschlagen";
}
?>
$passwort = $_POST['passwort'];
$sql = "SELECT * FROM benutzer WHERE benutzername='$benutzername' AND passwort='$passwort'"; $result = $conn->query($sql);
if ($result->num_rows == 1) {
$_SESSION['user'] = $benutzername;
header("Location: index.php");
} else {
echo "Login fehlgeschlagen";
} ?>
Anpassung: index.php
- Anzeige, ob ein Benutzer eingeloggt ist
<?php
session_start();
if (isset($_SESSION['user'])) {
echo "Eingeloggt als: " . $_SESSION['user'] . "<br>";
} else {
echo "<a href='login.html'>Login</a><br>";
}
?>
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