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";
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}}
===== 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}}
==== 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.
UserId:
{{fields>FIELD_NAME}}
105 OR 1=1
Then, the SQL statement will look like this:
SELECT * FROM Users WHERE UserId = 105 OR 1=1;
The SQL above is valid and will return ALL rows from the "Users" table, since OR 1=1 is always TRUE.
Does the example above look dangerous? What if the "Users" table contains names and passwords?
The SQL statement above is much the same as this:
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;
A hacker might get access to all the user names and passwords in a database, by simply inserting 105 OR 1=1 into the input field.