suit: PHP / MySQL Sicherheit

Beitrag lesen

und falls Unstimmigkeiten existieren, wird das Script sofort abgebrochen.

Das hört sich nicht "nett" gegenüber dem Endbenutzer an.

  1. Da ich bei DB Abfragen nicht nur mit Zahlen (ID) arbeite sondern auch mit Buchstaben / Wörter, weiß ich nicht wie ich diese behandeln soll zwecks einer Prüfung.

Kontextgerecht ;)

Für eine Prüfung auf Zahlen bietet sich ja regelrecht is_numeric an,

Nicht wirklich - "deadbeef" ist z.B. numeric.

was mache ich aber bei Wörter (Wörter mit Apostroph wie Bistro's), wäre da preg_match Sinnvoll oder habt Ihr einen besseren Vorschlag?

Entsprechend maskieren, wie schon gesagt - kontextgerecht behandeln. PHP sieht hierfür eben mysql_real_escape_string() vor.

  1. Aus Testzwecken frage ich die Datenbank momentan so ab:

$sich = "Op's";

$abfrage="SELECT ID,Kategorie,Sich,Event,Bild FROM 01_daten WHERE Sich LIKE BINARY'".mysql_real_escape_string($sich)."' AND Kategorie = '".mysql_real_escape_string($_POST[‘koi’])."' AND Event != '".mysql_real_escape_string($_POST[‘eve’])."' ORDER BY Event ASC";

Was hat's mit BINARY aufsich?

Warum $_POST[‘eve’] und nicht $_POST['eve']?

Ist das mysql_real_escape_string so richtig gesetzt oder wäre nachfolgendes Beispiel besser:

$sich = "Op's";
$sich = mysql_real_escape_string($sich);
$kategorie = mysql_real_escape_string($_POST['koi']);
$event = mysql_real_escape_string($_POST['eve']);

Besser nicht, aber übersichtlicher. Für das gibt es aber bereits vorgefertigtigte Funktionen (sprintf() z.B.).