So, ich habe mich jetzt mal mit deinen Links etwas näher beschäftigt bezüglich der Sicherheit meines Scriptes - in meinem Buch wird darauf nämlich (nach oberflächlichem nachsehen) nicht weiter eingegangen.
Folgender Code ist authors.php
- Code: Select all
<html>
<?php
$dbcnx = @mysql_connect('localhost', 'root', '');
if (!$dbcnx) {
exit('<p> Verbindungsaufbau zum Datenbankserver' .
' zurzeit nicht möglich. </p>');}
if (!@mysql_select_db('Jokes')) {
exit('<p> Auswahl der Witzedatenbank zurzeit nicht möglich.</p>');
}
$authors = @mysql_query('SELECT ID, Name FROM autoren');
if (!$authors) {
exit('<p>Fehler beim Abruf der Autoren aus der Datenbank!<br />'.
'Error: ' . mysql_error() . '</p>');
}
while ($author = mysql_fetch_array($authors)){
$id = $author['ID'];
$name = htmlspecialchars($author['Name']);
echo "<li>$name "
."<a href='editauthor.php?id=$id'>Bearbeiten</a> "
."<a href='deleteauthor.php?id=$id'>Löschen</a></li>";
}
?>
Nachdem man ausgewählt hat, dass man den Autoren löschen will, gelangt man zu deleteauthor.php:
- Code: Select all
<?php
//Alle Witze die zum Autor gehören zusammen mit dem Autor selbst löschen.
if (isset($_GET['deleteauthor'])) {
$id1 = $_GET['deleteauthor'];
$dbcnx = @mysql_connect('localhost', 'root', '');
if (!$dbcnx) {
exit('<p>Verbindung zur Datenbank zur Zeit nicht möglich</p>.');
}
if (!@mysql_select_db('Jokes')){
exit('<p>Auswahl der Witzedatenbank zurzeit nicht möglich</p>');
}
$ok1 = mysql_query("DELETE FROM Jokes WHERE AID='$id1'");
$ok2 = mysql_query("DELETE FROM autoren WHERE ID='$id1'");
if ($ok1 and $ok2) {
echo'<p>Autor wurde erfolgreich gelöscht!<br />'
."<a href='authors.php'>Zurück zur Startseite</a>";
} else {
echo'<p>Fehler beim Löschen des Autors aus der Datenbank!<br />'
. 'Fehler: ' . mysql_error() . '<br />'
."<a href='authors.php'>Zurück zur Startseite</a></p>";
}
}
else {
$dbcnx = @mysql_connect('localhost', 'root', '');
if (!$dbcnx) {
exit('<p>Verbindung zur Datenbank zur Zeit nicht möglich</p>.');
}
if (!@mysql_select_db('Jokes')){
exit('<p>Auswahl der Witzedatenbank zurzeit nicht möglich</p>');
}
$id = $_GET['id'];
echo'<p>Wollen Sie den Autor:<strong> ' . mysql_query("SELECT FROM autoren WHERE ID='$id'") .'</strong> wirklich löschen?';
echo'<a href="'.$_SERVER['PHP_SELF'].'?deleteauthor='.$id.'">'
.'<p>Ja! </a>'
."<a href='authors.php'>Zurück zur Startseite</a>";
}
?>
Nun meine Frage: Bietet sich bei deleteauthor nicht eher ein escapen an, als ein intval? Ich wüsste nämlich nicht, was mir intval bringen würde? Damit konvertier ich doch nur etwas in einen andern Wert?
Um ehrlich zu sein; Ich habe noch überhaupt kein Verständnis für diese Sicherheitskiste entwickelt.
Eigentlich müsste ich doch, um das Kindchen sicher an Land zu bringen, ein Formular erstellen, dass die ID per GET empfängt und nach der Sicherheitsabfrage per POST übergibt, oder nicht?
EDIT:
Ich hab kein Problem mit Formularen, ich frag mich nur, warum mein Lehrbuch es mir so erklären will...
Weißt du, wenn ich zuviel auf einmal mache, versteh ich nachher nur noch "Zug da, Bahnhof abgefahren".
Lerne ich es aber von Anfang an schon unsicher, ist es vielleicht schwierig sich das abzugewöhnen.