Bademeister: Sichere übergabe von Formalurdaten aus MySQL

Beitrag lesen

Hi Sim.

  1. Die ausgegebenen Daten beinhalten ID, Name, Kategorie und einen Link.
  2. Der Link ist nachher maßgebend wohin man weitergeleitet wird, ob zu einer meiner Seiten wo die Daten ID, Name und Kategorie weiterverarbeitet werden oder einfach nur zur Homepage desjenigen der in der Datenbank eingetragen ist.

Darf ich mal aus Interesse nach dem Zweck fragen? Einen Post-Request mit fest gewählten Parametern an vershiedene externe Ziele zu senden, scheint mir auf den ersten Blick nicht sinnvoll zu sein.

$id=mysql_result($resultabfrage,$i,"id");
$name=mysql_result($resultabfrage,$i,"name");
$kategorie=mysql_result($resultabfrage,$i,"kategorie");
$link=mysql_result($resultabfrage,$i,"linkverweis");

Der Zugriff auf diese Daten geht effizienter als mit mysql_result, dazu würde ich also nicht raten.

Ausgegebener Link ist beispielsweise mal: http://forum.de.selfhtml.org/

Das ist ein URL, kein Link! Ein Link ist (in diesem Zusammenhang) ein Element eines HTML-Dokumentes. Dementsprechend sollte am besten Deine obige PHP-Variable auch nicht $link heißen, und das Datenbankfeld schon gar nicht Linkverweis. Dieses Wort gibt es meiner Kenntnis nach nicht mal.

<form action="<?php if (isset($link)) echo htmlspecialchars(trim($link), ENT_QUOTES); ?>" method="post">

Steht in der Datenbank bereits ein gültiger URL, sprich: eine URL-kodierte Zeichenkette? Wenn ja, dann brauchst Du hier nicht zu trimmen, weil diese keine Whitespace-Zeichen enthält. Wenn nein (und das wäre besser), dann musst Du

  • den String bei der Ausgabe URL-kodieren
  • Dir gut überlegen, ob Du ihn vorher trimmen willst. Wenn der URL einen Query-String (sprich: GET-Parameter) enthalten darf, dann kann die nicht url-kodierte Zeichenkette durchaus mit Leerzeichen aufhören, die Du nicht abschneiden solltest.

<input type="hidden" name="id" value="<?php if (isset($id)) echo htmlspecialchars(trim($id), ENT_QUOTES); ?>">

<input type="hidden" name="name" value="<?php if (isset($name)) echo htmlspecialchars(trim($name), ENT_QUOTES); ?>">

<input type="hidden" name="kategorie" value="<?php if (isset($kategorie)) echo htmlspecialchars(trim($kategorie), ENT_QUOTES);

Zu dieser Trimmerei mal ganz allgemein: Entwerder ein Wert darf mit Whitespace-Zeichen anfangen oder aufhören, oder er darf es nicht. Wenn ja, dann solltest Du sie auch nicht abschneiden, wenn nein, dann sollte auch erst gar kein String, der solche Zeichen hat, in der Datenbank gespeichert werden, sondern das Trimmen ggf. beim Speichern bereits erledigt werden. Bei Deinen Feldern ist wahrscheinlich eher letzteres der Fall, aber das musst Du wissen. So oder so solltest Du bei der Ausgabe nichts trimmen (müssen).

Zu meiner frage, ist das Sicher oder habe ich noch etwas Wichtiges vergessen?

Im Hinblick auf welche Gefahren soll es denn sicher sein?

Viele Grüße
der Bademeister