dedlfix: httpd.conf mod_rewrite GET Parameter

Beitrag lesen

Tach!

Ich bastel gerade an einer Seite und habe mich gefragt, wie sicher die Werte bei der "Übertragung" sind, die ich über eine manipulierte URL an die Seite schicke und ob ich sie gegebenenfalls nochmal überprüfen muss.

Am besten kommst du, wenn du gar nicht auf Parameter umschreibst. Im Array $_SERVER stehen alle zum Request bekannten Daten drin, beispielsweise der Servername in $_SERVER['SERVER_NAME']. Experimentier damit mal ein wenig und schau, was bei mit und ohne Parametern in den Werten steht. Einige sind nähmlich mit Querystring, andere generell ohne. Und außerdem müssen nicht unbedingt alle Einträge überall vorhanden sein.

Die Prüfung, ob jemand nur .com oder .eu oder was ganz anderes aufgerufen hat, kann bei korrekter VHost-Konfiguration entfallen, denn anderes wird da nicht durchgelassen. Wenn der VHost vom Provider aufgesetzt wurde, sollte das gegeben sein. In deinem Script brauchst du dann nur zu unterscheiden, welches von beiden aufgerufen wurde, wenn das zu deinem Anwendungsfall gehört.

Der Pfad findet sich in $_SERVER["REQUEST_URI"], allerdings mit Querystring. Den braucht man meist nicht, weil die Werte schon von PHP in $_GET abgelegt worden sind. Jedenfalls kann man mit Stringoperationen oder komfortabler mit parse_url() den Wert zerlegen, den Pfadanteil dann gegebenenfalls noch mit explode().

Damit reduziert sich die Rewrite-Geschichte auf

RewriteCond %{REQUEST_FILENAME} !-f

Möglicherweise möchtest du auch noch ein

RewriteCond %{REQUEST_FILENAME} !-d

zum Ausschließen von existierenden Verzeichnissen haben. Und abschließend noch

RewriteRule .* /index.php [QSA]

Oder wenn es denn sein muss mit /[-\w]+ als Muster.

Damit sollte das Problem von vorn herein keins mehr sein.

Für mich stellt sich die Frage, sind die Werte durch manuelle Eingabe geschützt? Also kein index.php?domainendung=käse&seite=schwachsinn mehr möglich?

PHP arbeitet so, dass bei gleichnamigen Parametern in $_GET nur der letzte landet. Ausnahme ist, wenn die Parameter mit [] enden, dann gibts ein Array. Bei QSA hängst du ja die im Request enthaltenen Parameter an deine umgeschriebene URL an, woraufhin diese manipulierbar ist. Aber auch das sollte dich nicht stören, denn eine eventuelle Berechtigungsprüfung sollte darauf setzen, was letztlich ankommt und nicht, was du denkst, was durch die Umschreiberei ankommt. Somit kann man selbst mit Manipulation nur das ausführen, was man auch ohne sie dürfte.

Und wie verhält es sich mit den Werten die umgewandelt wurden? Kommen diese Daten sicher und unmanipulierbar im PHP Skript an, da es sich um GET Parameter handelt?

Siehe Abschnitt von eben, das wird durch QSA gegebenenfalls überschrieben. In vollständig aber zum Selbstauswerten steht der komplette Querystring in $_SERVER['QUERY_STRING'].

Also kann ich mit $_GET['domainendung'] direkt problemlos weiterarbeiten oder sollte ich es nochmal im PHP Skript überprüfen?

Bei deiner Methode musst du es nochmal prüfen, mit meiner und bei richtiger VHost-Konfiguration nur noch auswerten.

dedlfix.