Informatik

4.905 Beiträge

Ist mein Ansatz sicher genug gegen SQL-Injection und andere Angriffe, oder sollte ich zusätzliche Sicherheitsmaßnahmen ergreifen?

<?php
session_start();
include('connection.php');



if (!isset($_SESSION['username'])) {
    die("Session abgelaufen. Bitte loggen Sie sich erneut ein.");
}


$username_input = $_SESSION['username']; 


// SQL-Abfrage abhängig davon, ob der Benutzer Trainer ist
if ($_SESSION["Trainer"] == false) {
    $sql = "
        SELECT 
            u.username,
            k.kursbezeichnung,
            i.nachname AS trainer_name,
            d.path,
            d.displayname
        FROM user u
        JOIN kurs k ON u.kurs_idkurs = k.idkurs
        JOIN internal_user i ON k.internal_user_idinternal = i.idinternal
        JOIN dokumente d ON d.kurs_idkurs = k.idkurs
        WHERE u.username = ?
    ";
} else {
    $sql = "
        SELECT 
            u.username,
            k.kursbezeichnung,
            i.nachname AS trainer_name,
            d.path,
            d.displayname
        FROM internal_user u
        JOIN kurs k ON u.idinternal = k.internal_user_idinternal
        JOIN internal_user i ON k.internal_user_idinternal = i.idinternal
        JOIN dokumente d ON d.kurs_idkurs = k.idkurs
        WHERE u.username = ?
    ";
}



if ($stmt = mysqli_prepare($conn, $sql)) {
    
    mysqli_stmt_bind_param($stmt, "s", $username_input);


    if (mysqli_stmt_execute($stmt)) {
        
        mysqli_stmt_store_result($stmt);


       
        mysqli_stmt_bind_result($stmt, $username, $kursbezeichnung, $trainer_name, $path, $displayname);


       
        $documents = [];
        $course_name = null;


       
        while (mysqli_stmt_fetch($stmt)) {
            $course_name = $kursbezeichnung; 
            $documents[] = [
                'trainer_name' => $trainer_name,
                'path' => $path,
                'displayname' => $displayname
            ];
        }
    } else {
        die("Fehler bei der Abfrageausführung: " . mysqli_error($conn));
    }


    
    mysqli_stmt_close($stmt);
} else {
    die("Fehler bei der Abfragevorbereitung: " . mysqli_error($conn));
}
?>


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kursübersicht</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            background-color: #f4f4f9;
            margin: 0;
            padding: 20px;
            text-align: center;
        }


        .course-container {
            margin-top: 20px;
        }


        h1 {
            font-size: 2em;
            color: #2c3e50;
        }


        h2 {
            font-size: 1.5em;
            color: #2980b9;
        }


        h3 {
            font-size: 1.2em;
            color: #7f8c8d;
        }


        .document-list {
            list-style-type: none;
            padding: 0;
        }


        .document-list li {
            margin-bottom: 10px;
        }


        .document-list li a {
            text-decoration: none;
            color: #3498db;
            font-weight: bold;
        }


        .document-list li a:hover {
            color: #e74c3c;
        }
    </style>
</head>
<body>
    <h1>Willkommen, <?= htmlspecialchars($_SESSION['vorname'] ?? 'Nutzer') ?>!</h1>


    <?php if ($course_name): ?>
        <div class="course-container">
            <h2>Kurs: <?= htmlspecialchars($course_name) ?></h2>
            <h3>Trainer: <?= htmlspecialchars($documents[0]['trainer_name']) ?></h3>
            <h3>Dokumente für diesen Kurs:</h3>
            <ul class="document-list">
                <?php foreach ($documents as $doc): ?>
                    <li><a href="<?= htmlspecialchars($doc['path']) ?>" download><?= htmlspecialchars($doc['displayname']) ?></a></li>
                <?php endforeach; ?>
            </ul>
        </div>
    <?php else: ?>
        <p>Keine Dokumente für den Benutzer gefunden.</p>
    <?php endif; ?>
</body>
</html>


Ask Me Anything: Themenspecials

TCP/IP Referenzmodell Verständnisfragen?

Hallo,

ich habe ein paar kleine Frage zu dem TCP IP Referenzmodell und wäre sehr glücklich über Antworten,

Erstmal wollte ich fragen, inwiefern sich das OSI vom TCP/IP Modell unterscheidet. Im Internet fande ich folgende Differenzierungen: "TCP/IP und das sogenannte OSI-Modell sind die gängigsten Kommunikationsprotokolle innerhalb von Netzwerken. Das OSI-Modell legt dabei fest, wie Anwendungen miteinander kommunizieren können. TCP/IP dagegen ist dafür verantwortlich, Verbindungen aufzubauen und Netzwerke zu verbinden."

ich dachte jedoch immer, dass beide einfach für die Datenübertragung verantwortlich sind, gibt es hierbei wirklich einen Unterschied (außer die Anzahl an Schichten)? Ist es nicht sogar so, dass 3 Schichten vom Osimodell in einer Schicht beim TCP IP Modell zusammengefasst werden?

Dann wollte ich folgendes zu folgendem Abschnitt fragen "Die Netzzugangsschicht sorgt für die physische Verbindung von Subnetzen. Das kann zum Beispiel dein WLAN zu Hause sein, welches sich über einen Router mit dem Internet verbindet. Protokolle der untersten Schicht sind unter anderem das Ethernet (Kabel) oder IEEE 802.11 (Funk)."

Was sind die sogenannten Subnetze? Und was heißt, "physische Verbindung" in diesem Sachzusammenhang?

"Um spezifische Anwendungen eines Rechners zu unterscheiden, müssen ihre Kommunikationsverbindungen adressiert werden. Dafür sorgen Nummern, die sogenannten TCP- und UDP-Ports."

Was meint man hierbei mit " Kommunikationsverbindungen adressieren"? Angeben, um was für eine Art App es sich handelt?

Außerdem wollte ich fragen, was der Unterschied zwischen dem World WIbe Web und dem Internet ist. Das WWW ist ja quasi ein hypertext basiertes dokument, welches zu all möglichen Webseiten führt, oder? Und im Internet gibt es ganz viele zentrale Computer, die miteinander vernetzt sind und Informationen bereitstellen?

Dann wollte ich noch etwas Allgemeines zum TCP/IP Modell fragen. Also das TCP/IP Referenzmodell ist eine Veranschaulichung, wie Daten übertragen werden. Die unterste Schicht ist ja die Netzugangsschicht. Hier werden die in den ober liegenden Schichten gespeicherten Informationen in elektronische Bits umgewandelt. Nur verstehe ich nicht so ganz, inwiefern kann man das Modell so vereinfacht annehmen: Jede Schicht hat ja Protokolle, die bestimmte Aufgaben haben, ist es jetzt wirklich so, dass er die Protokolle der obersten, dann der nächst untersten und so weiter agieren? Außerdem ist es mir etwas schwer gefallen, die Anwendungsschicht (http) zu verstehen, sind das einfach die Anwendungen, die man sieht? weil http steht ja für hyper transport protocol, also der Transport von Informationen, wodurch ja beispielsweise eine Seite abgebildet wird.

Ich danke ganz herzlich!