Hallo an alle Leser,
ich beschäftige mich zurzeit mit dem Thema PHP Datenbankabfragen, Datenaktualisierung etc. pp. und versuche mich mit deren Sicherheitsvorkehrungen auseinanderzusetzen.
Dass man GET / POST / REQUEST / SESSION Variablen und Werte niemals ungeprüft zur Datenbank weiterleiten soll weiß ich also bereits!
magic_quotes_gpc und register_globals sind von Strato Standardmäßig ausgeschaltet und die per POST übergebenen Variablen werden mit drei Arrays (alle die dürfen Array, Pflicht Array und Kann Array) verglichen und falls Unstimmigkeiten existieren, wird das Script sofort abgebrochen. Auch prüfe ich ob in den übergebenen Werten unerlaubte Zeilenumbrüche vorhanden sind.
Jetzt zu meinen Verständnisproblemen;
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. Für eine Prüfung auf Zahlen bietet sich ja regelrecht is_numeric an, 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?
Beispiel:
if (preg_match('#[^a-z ßäöüÄÖÜàèòéáóúù-]#i', $_POST['koi']))
{
header("Location: $abbruch");
exit();
}
2. 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";
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']);
$abfrage="SELECT ID,Kategorie,Sich,Event,Bild FROM 01_daten WHERE Sich LIKE BINARY'".$sich."' AND Kategorie = '".$kategorie."' AND Event != '".$event."' ORDER BY Event ASC";
Ich bedanke mich vorab für alle Antworten.
Gruß,
Sub