Ćwiczenie – Bezpieczeństwo danych i raporty w PHP (INF.03)
1. Filtrowanie i walidacja danych wejściowych
Cel: Uczeń potrafi filtrować dane wprowadzane przez użytkownika.
Opis: W PHP dane z formularzy mogą być niebezpieczne, dlatego należy je filtrować i sprawdzać zanim zostaną użyte.
Pokaż kod PHP
<?php
$imie = filter_input(INPUT_POST, 'imie', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$wiek = filter_input(INPUT_POST, 'wiek', FILTER_VALIDATE_INT);
if ($imie && $email && $wiek) {
echo "✅ Dane poprawne!";
} else {
echo "❌ Wprowadź poprawne dane!";
}
?>
<form method="POST">
Imię: <input type="text" name="imie"><br>
Email: <input type="email" name="email"><br>
Wiek: <input type="number" name="wiek"><br>
<button type="submit">Sprawdź dane</button>
</form>
Filtrowanie danych chroni aplikację przed niepoprawnym i szkodliwym wejściem.
2. Zabezpieczenie przed SQL Injection
Cel: Uczeń potrafi zabezpieczyć zapytania SQL przed wstrzyknięciem danych.
Pokaż kod PHP
<?php
$conn = new mysqli("localhost", "root", "", "baza_bezpieczenstwo");
$stmt = $conn->prepare("INSERT INTO uzytkownicy (imie, email) VALUES (?, ?)");
$stmt->bind_param("ss", $imie, $email);
$imie = filter_input(INPUT_POST, 'imie', FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, 'email', FILTER_SANITIZE_EMAIL);
$stmt->execute();
echo "✅ Użytkownik został dodany bezpiecznie!";
?>
Przygotowane zapytania eliminują ryzyko SQL Injection.
3. Bezpieczne logowanie i haszowanie haseł
Cel: Uczeń potrafi bezpiecznie zapisywać i sprawdzać hasła użytkowników.
Pokaż kod PHP
<?php
if (isset($_POST['register'])) {
$login = $_POST['login'];
$haslo = password_hash($_POST['haslo'], PASSWORD_DEFAULT);
$conn->query("INSERT INTO loginy (login, haslo) VALUES ('$login', '$haslo')");
}
if (isset($_POST['login_submit'])) {
$login = $_POST['login'];
$haslo = $_POST['haslo'];
$res = $conn->query("SELECT * FROM loginy WHERE login='$login'");
$row = $res->fetch_assoc();
if ($row && password_verify($haslo, $row['haslo'])) {
echo "🔓 Zalogowano pomyślnie!";
} else {
echo "❌ Błędne dane logowania.";
}
}
?>
Hasła nigdy nie powinny być przechowywane w formie jawnej!
4. Tworzenie dynamicznego raportu z filtrowaniem
Cel: Uczeń potrafi tworzyć raporty z możliwością wyszukiwania danych bezpiecznie.
Pokaż kod PHP
<?php
$filter = filter_input(INPUT_GET, 'szukaj', FILTER_SANITIZE_STRING);
$sql = "SELECT * FROM uzytkownicy WHERE imie LIKE ?";
$stmt = $conn->prepare($sql);
$param = "%".$filter."%";
$stmt->bind_param("s", $param);
$stmt->execute();
$result = $stmt->get_result();
echo "<table class='effect-table'>";
echo "<tr><th>ID</th><th>Imię</th><th>Email</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['id']}</td><td>{$row['imie']}</td><td>{$row['email']}</td></tr>";
}
echo "</table>";
?>
<form method="GET">Szukaj: <input type="text" name="szukaj"><button type="submit">Filtruj</button></form>
ID Imię Email
1 Jan jan@wp.pl
2 Agnieszka aga@onet.pl
5. Prosty raport z tabeli produktów
Cel: Uczeń potrafi wygenerować raport z tabeli produktów w HTML.
Pokaż kod PHP
<?php
$result = $conn->query("SELECT * FROM produkty");
echo "<table class='effect-table'><tr><th>ID</th><th>Nazwa</th><th>Cena</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['id']}</td><td>{$row['nazwa']}</td><td>{$row['cena']}</td></tr>";
}
echo "</table>";
?>
6. Raport z agregacją (SUMA i ŚREDNIA)
Cel: Uczeń potrafi tworzyć raporty z podsumowaniami.
Pokaż kod PHP
<?php
$sql = "SELECT kategoria, COUNT(*) AS liczba, SUM(cena) AS suma, AVG(cena) AS srednia FROM produkty GROUP BY kategoria";
$result = $conn->query($sql);
echo "<table class='effect-table'><tr><th>Kategoria</th><th>Liczba</th><th>Suma</th><th>Średnia</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['kategoria']}</td><td>{$row['liczba']}</td><td>{$row['suma']}</td><td>{$row['srednia']}</td></tr>";
}
echo "</table>";
?>
7. Zadanie końcowe – Pełny raport
Połącz filtrowanie danych, bezpieczne logowanie i raporty produktów.
Użyj prepared statements, password_hash(), filtrowania i agregacji.
Stwórz jedną stronę „Raport i bezpieczeństwo” dla uczniów.
Po ukończeniu tego ćwiczenia uczeń potrafi tworzyć bezpieczne, dynamiczne raporty w PHP i MySQL.