Direktaufruf von Dateien
Alle Dateien, die nur includet werden, müssen wirksam gegen Direktaufruf geschützt werden. Dies wird in pragmaMx am Einfachsten durch die Prüfung auf das Vorhandensein der Konstanten mxAdminFileLoaded (in Dateien, die von der admin.php includet werden) oder für alle Anderen Dateien, der Konstanten mxMainFileLoaded bewerkstelligt werden.
z.B.
Request Variablen
Alle dem Script per get, post und cookie übergebenen Variablen, werden bereits von pragmaMx wie folgt behandelt: -
- bei register_globals=on werden zuerst die in den globalen Scope importierten Request Variablen wieder gelöscht.
- bei „nicht Administratoren“ werden die nicht erlaubten HTML-Tags gefiltert
- bei „nicht Administratoren“ werden potentiell gefährliche Teilstrings gefiltert
- bei „nicht Administratoren“ werden zensierte Inhalte ausgefiltert.
Nach der Behandlung, werden diese Variablen in den globalen Scope kopiert, da einige Scripte die Einstellung register_globals=on erwarten. (nicht mehr in pragmaMx 0.2)
Session Variablen
Die Session Variablen sollten nicht direkt über $_SESSION verwendet werden, sondern über folgende Api-Funktionen:
- mxSessionSetVar($name, $value) setzt eine Variable in der Session
- mxSessionGetVar($name) liest eine Variable aus der Session
- mxSessionDelVar($name) entfernt eine Variable aus der Session
Lesen und Schreiben in der Datenbank
Durch das explizite Escapen und filtern aller Request Variablen, sind diese eigentlich zur Verwendung in der Datenbank vorbereitet. Trotzdem, weil sich dieser Zustand zwischenzeitlich ändern kann, müssen alle Stringvariablen, vor der Verwendung in der Datenbank mit der Funktion mxAddSlashesForSQL($what) behandelt werden. Desweiteren empfehlen sich weitere individuelle Prüfungen auf Gültigkeit, z.B. anhand einer „white-List“ oder einer einfachen Längenbegrenzung. Variablen, die nur Zahlen enthalten dürfen, müssen vor der Verwendung in der DB mit intval() oder ähnlichen Funktionen behandelt werden, so dass auf jeden Fall nur ein gültiger Zahlenwert (oder 0) enthalten ist. Die Prüfung bzw. Umwandlung der Variablen sollte entweder direkt im zusammengesetzten String der Datenbankanfrage geschehen, oder zumindest unmittelbar davor. Die vielverbreitete Unsitte, dass ausgelesene Datenbankwerte mit stripslashes() behandelt werden ist unnötig, bzw. sogar unsinnig.
Datenbankzugriffe
Alle Datenbankzugriffe müssen über die pragmaMx-internen Funktionen aufgerufen werden. Diese Funktionen entsprechen vom Syntax her, den allgemeinen PHP-Funktionen. Statt mysql_xxxx ist grundsätzlich sql_xxx zu verwenden. Damit wird sichergestellt, dass alle Datenbankaufrufe über die PragmaMx-Klassen geroutet werden.
Anzeigen von Datenbankinhalten oder Request Variablen
Trotz der vorbeugenden globalen Behandlung von Request Variablen, sollten diese auch vor dem Anzeigen innerhalb der Webseite, auf Gültigkeit geprüft werden. Alle Daten die zur Anzeige gelangen, sollten mit der Funktion mxPrepareToDisplay() behandelt werden, um evtl. darin enthaltene eMailadressen und ähnliche Dinge, vor Spambots zu verstecken.