Erste Schritte geschafft, jetzt gehts um Sicherheit und co

Wie wir alle wissen (sollten) ändert mod_rewrite keine Links im Script. Damit auch die Links auf Deiner Page auf die neuen "Rewrited URLs" zeigen bedarf es der Anpassung im Code. Fragen und Probleme rund um's Coding werden hier diskutiert.

Moderator: Super-Mod

Erste Schritte geschafft, jetzt gehts um Sicherheit und co

Beitragvon illu » 13.05.2009 13:18

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
illu
.
.
 
Beiträge: 2
Registriert: 13.05.2009 12:28

Beitragvon Gumbo » 13.05.2009 14:13

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]
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier

Beitragvon illu » 13.05.2009 15:29

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?
illu
.
.
 
Beiträge: 2
Registriert: 13.05.2009 12:28

Beitragvon Gumbo » 13.05.2009 16:48

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).
Markus Wulftange
Gumbo
Moderator
Moderator
 
Beiträge: 5019
Registriert: 07.01.2005 01:18
Wohnort: Trier


Zurück zu Programmierung & Scriptanpassung für mod_rewrite

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste

cron