htaccess RewriteCond(s) und -Rule

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Mean
Mitglied
Beiträge: 115
Registriert: 13.03.2008 19:41

htaccess RewriteCond(s) und -Rule

Beitrag von Mean »

Hallo zusammen,

ich möchte phpBB für unseren Verein einsetzen, für den ich bereits einen Mitgliederbereich habe und aus dem heraus über SingleSignOn auf das phpBB zugegriffen werden soll. Es soll auch nur möglich sein, auf das phpBB zuzugreifen, wenn man bereits eingeloggt ist.

Deshalb wollte ich in der mitgelieferten .htaccess-Datei eine Prüfung per RewriteCond machen, ob die drei Registrierungscookies (phpbb3_..._k, phpbb3_..._u, phpbb4_..._sid) gesetzt wurden und wenn nicht eine RewriteRule ausführen, die die Benutzer auf die Login-Seite des Mitgliederbereichs verweist. Dummerweise macht die Rule das immer, unabhängig davon, ob ich eingeloggt war oder nicht. Wenn ich die RewriteCond und RewriteRule wieder auskommentiert habe hat wurde ich auch nicht mehr umgeleitet und war eingeloggt.

Könnt ihr mir da vielleicht weiterhelfen? Die Internetpräsenz unseres Vereins verwendet SEO-Urls und liegt im selben web-Verzeichnis wie der forum-Ordner, in dem das phpBB installiert ist - generell ist mod_rewrite also enabled.

Hier mal der Auszug aus der .htaccess:

Code: Alles auswählen

# Der Teil kommt vom phpBB bereits mitgliedert
<IfModule mod_rewrite.c>
RewriteEngine on

# Hier beginnt meine Abfrage
RewriteCond %{HTTP_COOKIE} !^phpbb3_([a-z0-9]*)_k$ [OR]
RewriteCond %{HTTP_COOKIE} !^phpbb3_([a-z0-9]*)_u$ [OR]
RewriteCond %{HTTP_COOKIE} !^phpbb3_([a-z0-9]*)_sid$
RewriteRule ^ https://example.org [L,R]

# Hier kommt dann der weitere Inhalt der original phpBB-.htaccess-Datei
Vielen Dank und viele Grüße,

Dirk
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: htaccess RewriteCond(s) und -Rule

Beitrag von gn#36 »

Sicherheit bringt dir das aber eigentlich so nicht wenn du nur kontrollierst, ob die Cookies existieren, aber nicht ob sie korrekt und gültig sind. Du solltest lieber ein paar Zeilen php Code in dein CMS einbauen, mit denen du überprüfst, ob der aktuelle Nutzer in phpBB eingeloggt ist. Zum Beispiel so ähnlich: https://wiki.phpbb.com/Practical.Add_custom_page
Das sollte weitgehend für phpBB 3.0 und auch phpBB 3.1 funktionieren, auch wenn es für 3.0 geschrieben ist.

Wenn nötig solltest du mehr oder weniger alles auch in einer Funktion kapseln können, falls die php Objekte dein CMS zu sehr stören. In 3.1 musst du möglicherweise auch ein paar Sicherheitsprüfungen abschalten (z.B. darfst du in deinem CMS nirgendwo $_GET oder $_POST als Variable nutzen, das wird wohl kaum der Fall sein, hierfür musst du in phpBB 3.1 $request->enable_super_globals() ausführen).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Mean
Mitglied
Beiträge: 115
Registriert: 13.03.2008 19:41

Re: htaccess RewriteCond(s) und -Rule

Beitrag von Mean »

Danke für deine Antwort.

Meine Frage würde das aber (meiner Meinung nach) nicht lösen. Von Seiten des CMS will und muss ich meiner Meinung nach nichts anpassen. Ich will lediglich verhindern, dass Benutzer die diese Cookies nicht haben das Forum sehen können (sie sollen sich gezwungenermaßen auf meiner Internetpräsenz einloggen und dann durch Klick auf den "Forum"-Link mit der SingleSignOn-Extension (meines CMS) am Forum angemeldet werden.

Dafür gibt es mehrere Gründe:
- das Passwort des Forums und das des Mitgliederbereichs müssten doppelt gepflegt werden, wenn ein Benutzer es ändert bzw. es wird nicht automatisch aus dem Mitgliederbereich am Forum geändert, da die Authentifizierung am Forum nicht über einen gültigen Foren-Login passiert.
- ich möchte, dass unsere Mitglieder über den Mitgliederbereich ins Forum kommen, dass sie gewzungenermaßen immer über unsere News-Seite(n) (die allgemeinen und die für die Mitglieder) ins Forum kommen, um so ggf. die letzten Neuigkeiten zu lesen (wer darauf keine Lust hat macht das natürlich auch so nicht, aber auf die Art besteht zumindest die Chance).

Ob die Cookies valide sind,... ist dann erstmal zweitrangig, da das ja wiederum vom Forum selbst getestet wird. Es ist zwar so dann zwar nicht Bombensicher, aber für unsere Zwecke würde das reichen.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: htaccess RewriteCond(s) und -Rule

Beitrag von gn#36 »

Du bekommst aber auch als Gast bereits Cookies gesetzt. Dementsprechend würde die Geschichte maximal 1x eine Weiterleitung erzwingen und danach ist die Seite für jeden zugänglich wenn du nur auf Vorhandensein der Cookies prüfst. Leute die erst auf das Forum zugreifen merken nicht einmal dass sie sich auch einloggen könnten.

Naja wie dem auch sei. Was deine Cookies angeht: Ich übersetze dir mal was du im Moment machst: Wenn der Cookie Header nicht exakt phpbb3_([a-z0-9]*)_k enthält oder nicht exakt phpbb3_([a-z0-9]*)_u enthält oder nicht exakt phpbb3_([a-z0-9]*)_sid enthält, dann leite weiter nach https://example.org/

Somit nagelst du die Headerzeile auf einen völlig unmöglichen Inhalt fest. Die Variable ${HTTP_COOKIE} enhält immer alle cookies mit Namen und Inhalt. Wenn du aber willst, dass das Ding von Anfang bis Ende nur phpbb3_([a-z0-9]*)_k enhält, dann muss dieser Cookie zwangsweise leer sein und außerdem kann es gleichzeitig nicht phpbb3_([a-z0-9]*)_u enthalten. Lass' also die ^und $ weg. Das reicht aber auch noch nicht, weil nämlich dann niemand die Loginseite zu Gesicht bekommen kann, bis er Cookies hat. Du solltest also das Forum noch von der Weiterleitung ausschließen.

Beispielsweise sieht der Cookie Header bei mir lokal in einem Testforum so aus:

Code: Alles auswählen

phpbb3_bn4f3_u=1; phpbb3_bn4f3_k=; phpbb3_bn4f3_sid=f2033c67fa3aed06592aeff119e694e3
Das ist übrigens der Cookie Header wenn ich im Privaten Modus die Seite ansurfe und nicht angemeldet bin. Die Methode taugt also so nicht wirklich was. Das mindeste was du noch mit überprüfen solltest ist, ob die user_id = 1 ist - das ist dann ein Gast. Aber das schließt immer noch keine Bots aus.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Mean
Mitglied
Beiträge: 115
Registriert: 13.03.2008 19:41

Re: htaccess RewriteCond(s) und -Rule

Beitrag von Mean »

Danke für die ausführliche Erklärung, das macht einiges verständlicher.
Das heißt, wenn ${HTTP_COOKIE} eine String-Auflistung aller Cookies ist, dann müsste der RegEx ja eigentlich abfragen, ob irgendwo innerhalb des Strings phpbb3_..._u oder phpbb3_.._k oder phpbb3_..._sid vorkommt und phpbb_..._u den Inhalt 2 hat (den bekam ich, nachdem ich mich eingeloggt habe).

Grundsätzlich kann ich deine Argumentation nachvollziehen. Bei dem was ich machen will geht es aber nicht um einen Sicherheitsmechanismus, sondern um gezielte Lenkung der Mitglieder über best. Seiten, deshalb muss es auch nicht soooo 1000% bombensicher sein und würde aus meiner Sicht reichen, wenn ein paar "Standardwerte" abgeprüft würden. Gibt es denn trotzdem eine bessere Lösung, wie man so etwas umstellen könnte? Ich habe zunächst auch überlegt alle Aufrufe die als Referrer nicht die URL https://(www.)example.org beinhalten (sprich, wer nicht über einen Link innerhalb des Forums oder der Internetseite auf das Forum kommt wird wieder weggeschickt.

Die Login-Seite für Mitglieder liegt außerhalb des Forums, da sie Teil des CMS ist.

Das Entfernen von ^und $ hat nichts gebracht. Ich müsste den RegEx dann ja so umbauen, dass die Teilmengen (phpbb3_..._u, ...k, ...sid) in dem ${HTTP_COOKIE} string vorkommen müssen. Also beliebige Zeichen vor und hinter jedem Ausdruck kommen dürfen?! Habe ich das richtig verstanden?

Vielen Dank und viele Grüße,

Dirk
Mean
Mitglied
Beiträge: 115
Registriert: 13.03.2008 19:41

Re: htaccess RewriteCond(s) und -Rule

Beitrag von Mean »

Mit diesen Anweisungen habe ich es jetzt so hinbekommen, wie ich es erstmal gedacht hatte:

Code: Alles auswählen

RewriteCond %{HTTP_COOKIE} !phpbb3_([a-z0-9]*)_k [NC,OR]
RewriteCond %{HTTP_COOKIE} !phpbb3_([a-z0-9]*)_u [NC,OR]
RewriteCond %{HTTP_COOKIE} !phpbb3_([a-z0-9]*)_u=2;? [NC,OR]
RewriteCond %{HTTP_COOKIE} !phpbb3_([a-z0-9]*)_sid [NC]
RewriteRule ^ https://supporters-karlsruhe.de [NC,L]
Ich muss es noch etwas testen. Nichts desto trotz wären mir weitere Meinungen auch noch sehr lieb, dass ich es ggf. noch erweitern kann.
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Re: htaccess RewriteCond(s) und -Rule

Beitrag von gn#36 »

Mean hat geschrieben:Gibt es denn trotzdem eine bessere Lösung, wie man so etwas umstellen könnte?
Die in meinen Augen beste Lösung habe ich dir bereits in meinem ersten Post geschrieben.
Das Entfernen von ^und $ hat nichts gebracht. Ich müsste den RegEx dann ja so umbauen, dass die Teilmengen (phpbb3_..._u, ...k, ...sid) in dem ${HTTP_COOKIE} string vorkommen müssen.
Aber genau das ist doch jetzt die Lösung die funktioniert??

Übrigens leitest du jetzt denke ich alle Leute um, die nicht der User mit der ID 2 sind (also vermutlich du selbst, wenn du der Admin bist, der das phpBB installiert hat) oder eine ID haben, die mit einer 2 beginnt (also 2, 21, 200,...). Es sei denn ANONYMOUS hat bei dir die ID 2?
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Mean
Mitglied
Beiträge: 115
Registriert: 13.03.2008 19:41

Re: htaccess RewriteCond(s) und -Rule

Beitrag von Mean »

gn#36 hat geschrieben:Die in meinen Augen beste Lösung habe ich dir bereits in meinem ersten Post geschrieben.
Aber das macht ja genau die SingleSignOn-Lösung, die ich verwende: Sie meldet den Benutzer am phpBB an, wenn er auf der Internetseite auf den Link "Forum" geklickt hat. Durch das htaccess will ich ja nur sicherstellen, dass der Benutzer nur die SingleSignOn-Lösung verwendet, wenn er ans Forum wil. Wenn sich einer die Mühe macht und Schadcode bei mir einschmuggelt umd sich das phpbb3_..._u Cookie mit einerm Wert > 1 setzen zu können, dann bin ich froh, wenn er nur das macht. Und nur weil er dann die Cookies hat und das Forum sieht ist er ja noch lange nicht angemeldet am Forum. Dann sieht er nur die index.php ohne jegliche Foren (denn um die Foren zu sehen müsste er/sie sich zusätzlich dann noch am Forum anmelden.

Vielleicht ist das bisher auch nicht so rübergekommen, dass das der Plan ist.
gn#36 hat geschrieben:Aber genau das ist doch jetzt die Lösung die funktioniert??{/quote]

Ja, sorry. Ich hatte das probiert, aber es hat nicht funktioniert. Vermutlich war noch etwas grundsätzliches falsch? Ich habe heute Morgen noch gelesen zu RegEx in den Conditions und es nochmal von vorne gemacht und dann ging es komischerweise.
gn#36 hat geschrieben:Übrigens leitest du jetzt denke ich alle Leute um, die nicht der User mit der ID 2 sind (also vermutlich du selbst, wenn du der Admin bist, der das phpBB installiert hat) oder eine ID haben, die mit einer 2 beginnt (also 2, 21, 200,...). Es sei denn ANONYMOUS hat bei dir die ID 2?
Danke für den Hinweis. Das war mir so nicht bewusst. Ich dachte, so wie 1 für Gast steht wäre 2 nicht die User-Id, sondern würde für "angemeldeter Benutzer" im allgemeinen stehen. Dann muss ich da den Check noch umbauen, dass der Wert nicht 1 sein darf.
Antworten

Zurück zu „Coding & Technik“