CREATE TABLE meldung (
id INT NOT NULL auto_increment,
datum DATETIME DEFAULT NULL,
name VARCHAR(200) DEFAULT NULL,
eintrag TEXT,
CONSTRAINT PK_id PRIMARY KEY (id)
);
Zusätzlich zu den Daten **datum, name** und **eintrag** wurde ein Attribut **id** eingeführt, welches als Schlüssel dient.
\\
\\
Das folgende Skript **show.php** liest alle Einträge der Datenbank aus und gibt sie in Tabellenform aus:
Alle Meldungen
\n";
while($row=mysqli_fetch_array($erg))
{
echo "Datum: ".$row["datum"]." \n";
echo "Name: " .$row ["name"]. " \n";
echo "Eintrag: \n";
echo "".nl2br(htmlentities($row["eintrag"]))." \n";
}
echo "\n
\n";
?>
neuen Eintrag hinzufügen
{{:inf:inf8bi_201819:2:pasted:20181115-191941.png}}
Um neue Einträge für das Gästebuch zu erstellen, existiert ein weiteres Skript insert.php:
Neuer Eintrag in unser Gästebuch
die Werte müssen überprüft werden
//und bei Gültigkeit in die DB eingefügt werden
$DatenOK=1; //wir gehen prinzipiell von der Gültigkeit der Daten aus
$error=""; //es gab noch keine Fehlermeldung bis hier hier
if($name=="") //Kein Name eingegeben
{
$DatenOK=0;
$error.="Es muss ein Name eingegeben werden!
\n";
}
if($eintrag=="") //Kein Kommentar eingegeben
{
$DatenOK=0;
$error.="Ein Eintrag ohne Kommentar macht nicht viel Sinn!
\n";
}
if($DatenOK) //Daten OK -> also in DB eintragen
{
$timestamp=date("Y-m-d h:i:s", time());
mysqli_query($con,"INSERT INTO eintraege (datum, name, eintrag) VALUES (\"$timestamp\", \"$name\", \"$eintrag\" );");
echo mysqli_error($con);
echo "Daten wurden eingetragen.";
}
else
{
echo "Fehler:
\n"; //Fehlermeldung
echo $error;
}
}
//Formular
?>
Alle Einträge anzeigen
{{:inf:inf8bi_201819:2:pasted:20181115-191809.png?direct}}
===== SQL Injection =====
**SQL injection ist eine Einschleusung von Code der die Datenbank möglicherweise zerstört**
**SQL injection ist eine von den meist genutzten Hacking Methoden**
**SQL injection bezeichnet das Einschleusen von bösartigen Code in die SQL-Statements mithilfe von Formulardaten in Webseiten**
{{:inf:inf8bi_201819:2:pasted:20190523-180706.png?direct}}
{{:inf:inf8bi_201819:2:pasted:20190523-182247.png?direct}}
==== SQL Injection basierend auf 1=1 ist immer wahr (true)====
Nehmen wir an, es soll innerhalb einer Webseite die UserId angegeben werden, um die jeweiligen Informationen des Users auszugeben.
\\
Ist diese Eingabe nicht beschränkt, so kann der Benutzer eingeben was er will. Füllt er diese Eingabe "intelligent" aus, so kann er die ursprüngliche Funktion des SQL-Statements vollkommen verändern.
\\
z.B.:
{{:inf:inf8bi_201819:2:pasted:20190523-181646.png?direct}}
Dadurch wird das SQL-Statement wie folgt verändert:
SELECT * FROM Users WHERE UserId = 105 OR 1=1;
Somit wird dieses SQL-Statement alle Zeilen der Tabelle Users zurückgeben, da ja OR 1=1 immer erfüllt ist.
\\
Das wäre besonders heikel, falls die Users Tabelle Benutzernamen & Passwörter beinhaltet. Dann würde das manipulierte SQL-Statement dasselbe verursachen wie folgendes SQL-Statement:
Select UserID, Name, Passowrd FROM Users Where UserId=105 or 1=1
Durch diese Manipulation würde der Hacker Zugriff zu allen Benutzernamen und Passwörter in der Datenbank erlangen, durch einfaches hinzufügen von OR 1=1.