Am Donnerstag, den 26.11.2020, 08:38 +0100 schrieb Luca Bertoncello: > > Ich will eine Seite schützen, genau gesagt, eine <Location>, die dann > auf einem anderen Server per Proxy weiterleitet. > Dabei kann ich weder eine Prüfung nach IP noch eine BaseAuth nutzen, > denn das Programm, das die Seite später nutzt keine BaseAuth kann und es > kommt u.U. aus verschiedenen dynamischen IPs. > > Ich würde, wie viele andere machen, eine sogenannten API-Key nutzen, so > dass die Anfragen im Format > https://mein.seite.de/blub/1/2/3.png?key=<mein Key> sind. > > Ich kann aktuell folgendes machen (und funktioniert): > > <Location /blub> > <If "%{QUERY_STRING} =~ /key=123456789/"> > Require all granted > </If> > <Else> > Require all denied > </Else> > </Location> > > Ich will aber nicht bei jedem API-Key ein Abschnitt schreiben... Ich > würde lieber das in einer Datei speichern. > Aber ich habe keine Ahnung, wie ich diese Daten aus einer Datei lesen > kann... > > Kann jemand mir helfen?
Du nutzt mit '=~' doch eine Regex-Abfrage. Da kannst du auch alle Schlüssel in den Regex-Ausdruck schreiben, ohne jeweils einen neuen Abschnitt schreiben zu müssen. Du kannst deinen Abschnitt sogar kürzen. Schau dir mal das 3. Beispiel unter https://httpd.apache.org/docs/2.4/de/expr.html und https://httpd.apache.org/docs/2.4/howto/access.html#env an. Alternativ könnte man die file() Funktion vielleicht so nutzen (ungetestet): <If "%{QUERY_STRING} =~ /key=(\d+)/"> Require expr file('keys.txt') =~ $0 </If> Ich muss dazu sagen, ich weiß nicht, ob Apache hier die längste oder die kürzeste Übereinstimmung ausgibt. Bestimmte Regexe unterstützen die Notation mit einem Fragezeichen am Ende '(\d+?)', um die längste Übereinstimmung auszugeben. Das Problem erscheint mir, dass du ja den vollständigen Schlüssel brauchst, der dann in der Back-Referenz $0 gespeichert wird. Also eigentlich alles nach dem '=' und bevor ein weiterers Key-Value-Paar kommt (bestimmt getrennt durch '&') oder das Ende des Strings ('$'). So etwas wie: /key=(\d+)[&$]/ Da kann ich dir leider nicht so sehr helfen. Alternativ kannst du wahrscheinlich auch etwas mit mod_rewrite und RewriteMap basteln, wenn du die Schlüssel aus einer Datei auslesen möchtest. HTH und Gruß, Daniel
