Seite 1 von 1

Erste Schritte geschafft, jetzt gehts um Sicherheit und co

Verfasst: 13.05.2009 13:18
von illu
Hallo,

ich beschäftige mich zum ersten mal mit dem Modul mod_rewrite und habe in diesem Forum viele Erfahrungen in den letzten 24 Stunden sammeln können.

Ich habe es auch geschafft mir eine .htaccess Datei zu schreiben die erstmal so funktioniert. Anfängliche Probleme wie die Pfadangabe konnte ich mit den Tipps wie <base ...> lösen.

Trotzdem hab ich nochmal ein paar Fragen zu meiner Datei.

hier erstmal ein Einblick, dann die Fragen:

Code: Alles auswählen

Options +FollowSymLinks
RewriteEngine on
RewriteBase /

RewriteRule ^modul/(.*)/seite/(.*)\.html?$ index.php?modul=$1&seite=$2


Meine Links die bisher so aussahen index.php?modul=test&seite=testseite kann ich jetzt so aufrufen modul/test/seite/testseite.html.

Alles super, jetzt hab ich aber bei manchen seiten noch Einträge die ausglesen werden können. Dies klappt auch wenn ich meine .htaccess Datei erweiter mit:

Code: Alles auswählen

RewriteRule ^modul/(.*)/seite/(.*)/eintrag/(.*)\.html?$ index.php?modul=$1&seite=$2&eintrag=$3


Meine Fragen sind nun:

Soll ich lieber für jede Möglichkeit eine weiter Regel schreiben und die eine mit [L] beenden? Also sowas?

Code: Alles auswählen

RewriteRule ^modul/(.*)/seite/(.*)/eintrag/(.*)\.html?$ index.php?modul=$1&seite=$2&eintrag=$3 [L]
RewriteRule ^modul/(.*)/seite/(.*)\.html?$ index.php?modul=$1&seite=$2 [L]


Muss man in so einem Fall eigentlich die größere Regel, also die mit mehr Einträgen bzw. Variablen die z.B über GET geholt werden immer oben eintragen oder ist die Reihenfolge egal?

Wenn die größte (in meinen Augen dann doch auch die mächtigste Regel oder?) oben steht und durch [L] keine weitere mehr zugelassen wird, ist die Möglichkeit der Manipulation höher oder nicht?

Wie sicher ist meine .htaccess Datei eigentlich um Manipulationen über HTTP Header, XSS und co zu vermeiden?

Sollte ich oder muss ich weitere Syntax abfragen stellen, die z.B einen eintrag=$3 auf Zahlen prüft?

Ich hätte bestimmt noch mehr Fragen aber ich denke das reicht erstmal. Probleme mit Sessions und Formularen hab ich noch nicht getestet, für einen kurzen Anstoß, was man dabei beachten sollte, wäre ich nicht böse ;) Ich möchte nur erstmal das eine richtig Verstehen, bevor ich mich schon an die nächste Geschichte setze...

Gruß illu

Verfasst: 13.05.2009 14:13
von Gumbo
Wenn die Regeln jeweils eindeutig sind, ist die Reihenfolge egal. In deinem Fall würde aber das allgemeingültige „.*“ aus der zweiten Regel den Teil „schlucken“, der eigentlich mit der ersten Regel verarbeitet werden sollte.
Deswegen ist deine gewählte Reihenfolge schon richtig. Besser wäre es jedoch, dennoch eindeutige Regeln zu verwenden:

Code: Alles auswählen

RewriteRule ^modul/([^/]+)/seite/([^/]+)/eintrag/([^/]+)\.html?$ index.php?modul=$1&seite=$2&eintrag=$3 [L]
RewriteRule ^modul/([^/]+)/seite/([^/]+)\.html?$ index.php?modul=$1&seite=$2 [L]

Verfasst: 13.05.2009 15:29
von illu
Danke für die schnelle Antwort!

Hab jedoch noch eine kleine Frage die mir gerade gekommen ist.

Ich bin ja so einer, der brauchs immer sicher ;)

Mir ist aufgefallen, dass es auf den seiten nicht nur &eintrag=1 oder so gibt sondern auch &archiv=3 und so weiter.

Ich würde mit meinem bisherigen wissen nun sowas machen:

Code: Alles auswählen

RewriteRule ^modul/([^/]+)/seite/([^/]+)/([^/]+)/([^/]+)\.html?$ index.php?modul=$1&seite=$2&$3=$4 [L]
RewriteRule ^modul/([^/]+)/seite/([^/]+)\.html?$ index.php?modul=$1&seite=$2 [L]


oder ist es so besser?

Code: Alles auswählen

RewriteRule ^modul/([^/]+)/seite/([^/]+)/eintrag/([^/]+)\.html?$ index.php?modul=$1&seite=$2&eintrag=$3 [L]
RewriteRule ^modul/([^/]+)/seite/([^/]+)/archiv/([^/]+)\.html?$ index.php?modul=$1&seite=$2&archiv=$3 [L]
RewriteRule ^modul/([^/]+)/seite/([^/]+)\.html?$ index.php?modul=$1&seite=$2 [L]


Wenn die Anweisungen noch mehr werden sollten, würde ich einfach eine weitere Rule einfügen, da sich archiv und eintrag aber auf der selben höhe befinden könnte ich doch die erste Version nutzen oder?

Die Vorteile der zweiten Version könnte doch aber sowas wie eine Whitelist sein oder?
Hier werden doch nur eintrag und archiv möglich sein!?

Jemand der eine url angibt wie (uebersicht statt eintrag oder archiv) seite=index&uebersicht=123 bzw. seite/index/uebersicht/123.html dürfte doch keine Angaben erhalten, selbst wenn es die Seite gibt?

Verfasst: 13.05.2009 16:48
von Gumbo
Deine Anwendung sollte schon prüfen, was „rein kommt“. Das jedoch in den Regeln festzulegen, ist eher wenig sinnvoll, da, falls jemand die eigentliche URL kennt, auch eben diese URL mit beliebigen Manipulationen angefragt werden kann. Deine Erwartung, dass deine Anwendung dadurch nun sicherer sei, ist also nicht der Fall (Security by Obscurity).