Sicherheit: httpd.conf mod_rewrite GET Parameter

Beitrag lesen

Nun, zu den sehr vielen Dingen zählt ja wohl auch zu beschreiben, was Du wirklich willst (a.k.a. "Gesamtproblem"), statt hier nach Teillösungen zu suchen und die Antworten zu verwerfen weil diese dem Gesamtproblem nicht gerecht werden.

Es geht wie im ersten Beitrag beschrieben, allein um die Sicherheit der Übertragung der Daten an das PHP Skript, die ich vorher in der httpd.conf geprüft habe. Ob diese nochmal im PHP Skript zu überprüfen sind.
Oder ob diese Daten in irgendeiner Form und wenn ja wie, noch manipuliert werden können, weil der Gedanke der regulären Ausdrücke an sich schon Fehler hat, weil er etwas nicht bedenkt (Beispiel!). Es ging mir nicht speziell darum zu prüfen, ob die URL überhaupt valide ist, deshalb habe ich das in abgekürzter Form geschrieben. Die Prüfung erfolgt natürlich auch, aber das war nicht zu der Frage relevant deswegen ließ ich das aus. Allein die übertragenen Werte sind wichtig oder ob wie Hotti es geschrieben hat, schon durch die URL manipuliert werden können.

Ich habe aber trotzdem deine Gedanken aufgeriffen, weil ich sie auch interessant finde.

[code lang=php]# Konfiguration:
$erlaubte=explode(',', 'com.uk,de,fr,com,pl,it,info'); # woher auch immer

Weshalb nutzt du an dieser Stelle nicht direkt ein Array? Gibt es bei deiner Variante einen Vorteil?

$erlaubte = array('com.uk','de','fr','com','pl','it','info');

if ( preg_match($r, $string) ) {

if ( preg_match('/[^A-Za-z0-9-.]/', $string) ) {

Hier ist der Knackpunkt. Muss ich das über PHP machen (oder nochmals prüfen) oder reicht es das mit einer Prüfung schon in der httpd.conf? Werden die Daten sicher an das PHP Skript gesendet, wenn ich sie vorher richtig geprüft habe? Angenommen: Ich lasse keine falsche Eingaben durch. Gibt es so eine Art Man in the Middle Risiko dabei, dass jemand seite1 noch zu seite2 ummanipulieren kann?

Denn dann würde ich es, um deine RegEx aufzugreifen, folgendermaßen lösen, aber mit ^ außerhalb:

RewriteRule [1].(de|com|co.uk|com.eu) index.php?domainendung=$1

Und spare mir damit ein preg_match, da PHP bekanntlich langsamer arbeitet. Wenn die Daten aber nicht sicher sind, die ich vorher in der httpd.conf geprüft habe, würde ich eine Lösung in deiner Art und Weise auch übernehmen.

mfg,


  1. A-Za-z0-9-. ↩︎