GamGam-Progger: .htacces "sperren von bestimmter PHP Datei mit GET parametern"

Hallo,

ich habe eine Forensoftware bei der ein Dienstleister für die Wartung bezahlt wird.
Bei der Durchsicht der Logdatein ist mir aufgefallen, das sehr viele Aufrufe auf "/index.php?mode=add&user=42" erfolgen. Diese erscheinen aber nicht in Google Analyticlogs und könnten somit unnützer Traffic sein.

Da ich leider nach dem Wartungsvertrag nicht an PHP Dateien etwas ändern darf, möchte ich gerne über den Umweg der .htacces gehen und da ein wenig prüfen.
Ich möchte nur bei dem Aufruf der index.php mit den oben angegeben GET Parametern (mode=add UND user=42) eine weiterleitung auf eine Subdomain.
Ist das Möglich?

  1. Ich möchte nur bei dem Aufruf der index.php mit den oben angegeben GET Parametern (mode=add UND user=42) eine weiterleitung auf eine Subdomain.
    Ist das Möglich?

    Ja.

    Einfach eine (oder mehrere) RewriteCond-Anweisungen auf QUERY_STRING und dann per RewriteRule umleiten.

    1. Einfach eine (oder mehrere) RewriteCond-Anweisungen auf QUERY_STRING und dann per RewriteRule umleiten.

      Wäre das nicht nur eine interne Weiterleitung und die URL auf die umgeleitet wird, wird nicht angezeigt?

      Wäre ein
      Redirect permanent /index.php?mode=add&user=42 http://subdomain.mydomain.tld/index.php
      nicht eher die Weiterleitung?

      MfG
      bubble

      1. Tach!

        Einfach eine (oder mehrere) RewriteCond-Anweisungen auf QUERY_STRING und dann per RewriteRule umleiten.
        Wäre das nicht nur eine interne Weiterleitung und die URL auf die umgeleitet wird, wird nicht angezeigt?

        Nicht zwingend. Man kann mit mod_rewrite auch Redirects erzeugen.

        Wäre ein
        Redirect permanent /index.php?mode=add&user=42 http://subdomain.mydomain.tld/index.php
        nicht eher die Weiterleitung?

        Ja, funktioniert nur nicht, weil der Apache sich nicht für den Querystring interessiert. Für das Finden des auszuliefernden Dokuments oder des zu startenden Scripts sind diese Parameter nicht von Belang. Lediglich mod_rewrites RewriteCond bietet an, den Querystring auszuwerten.

        dedlfix.

        1. Nicht zwingend. Man kann mit mod_rewrite auch Redirects erzeugen.

          Gut zu wissen :)

          Ja, funktioniert nur nicht, weil der Apache sich nicht für den Querystring interessiert. Für das Finden des auszuliefernden Dokuments oder des zu startenden Scripts sind diese Parameter nicht von Belang. Lediglich mod_rewrites RewriteCond bietet an, den Querystring auszuwerten.

          Noch besser :'D

          MfG
          bubble

        2. Hallo dedlfix,

          Wäre ein
          Redirect permanent /index.php?mode=add&user=42 http://subdomain.mydomain.tld/index.php
          nicht eher die Weiterleitung?

          Ja, funktioniert nur nicht,

          So wie es da steht, tut es nicht das erhoffte. Das stimmt.

          weil der Apache sich nicht für den Querystring interessiert. Für das Finden des auszuliefernden Dokuments oder des zu startenden Scripts sind diese Parameter nicht von Belang. Lediglich mod_rewrites RewriteCond bietet an, den Querystring auszuwerten.

          Das aber stimmt nicht. Es bedarf für folgende Konfiguration, die an einer index.php mir dem Querystring "mode=add&user=42" dem Browser eine Weiterleitung sendet, nur der Module core und alias:

          <If "%{QUERY_STRING} == 'mode=add&user=42'">  
              Redirect permanent /index.php http://www.example.com  
          </If>
          

          BTW: Schön ist das neue Forum geworden! :)

          Gruß aus Berlin!
          eddi

          1. Tach!

            weil der Apache sich nicht für den Querystring interessiert. [...] Lediglich mod_rewrites RewriteCond bietet an, den Querystring auszuwerten.
            Das aber stimmt nicht. Es bedarf für folgende Konfiguration, die an einer index.php mir dem Querystring "mode=add&user=42" dem Browser eine Weiterleitung sendet, nur der Module core und alias:

            <If "%{QUERY_STRING} == 'mode=add&user=42'">

            Redirect permanent /index.php http://www.example.com
            </If>

              
            Und für das <If> braucht es einen 2.4er Apachen. Die Chance einen solchen schon in freier Wildbahn anzutreffen ist, halte ich für noch nicht besonders hoch. Ich sollte mir aber mal die neue Feature-Liste genauer anschauen. So ein <If> hätte ich schon vor langer Zeit mal gebraucht, konnta da aber nur mit einem <IfDefine> Vorlieb nehmen.  
              
              
            dedlfix.
            
            1. Re:

              So ein <If> hätte ich schon vor langer Zeit mal gebraucht, konnta da aber nur mit einem <IfDefine> Vorlieb nehmen.

              Oh ja, dass kenne ich, die Welt an ihrem Ist-Zustand hinnehmen zu müssen. Und <IfDefine *></IfDefine> ist genau so eine Krücke. Man muss hier sogar Einfluss haben können, Umgebungsvariablen des Serverprozesses zu bestimmen.

              Aber was da mit <If ~></If> im Anmarsch ist, erscheint mir als die heimliche Rache gegen mod_rewrite.c. Leider ist sie nicht wirklich Konsequent. Beispielsweise die folgende, fiktive Konfiguration ist für den Endnutzer nicht nicht möglich, denn die Direktive Alias verbleibt auch in der Version 2.4 im Context server config bzw. virtual host:

              <If ~>  
                  Alias /bb.php /aa.pl  
              </If>
              

              Das ist um so bedauerlicher, da Entsprechungen für die Anwendung Regulärer Ausdrücke existieren (AliasMatch, RedirectMatch). Zumindest für Weiterleitungen hätte man hier ein Adäquat schaffen können. Denn die Auswertung der Bedingungen einer Anfrage sind mod_rewrite.c ebenbürtig (vgl. Expressions in Apache HTTP Server). Es mangelt nach meinen Erkenntnissen auch nicht an der Infrastruktur. Inwiefern es dann tatsächlich sinnig wäre, Funktionalität von mod_rewrite.c zu parzellieren, ist natürlich derzeit hinfällig.

              mod_rewrite.c kann selbständig in die Bereiche (bzw. Teilen davon) der

              • response header (flags CO, T),
              • externe/interne Weiterleitungen bzw. Status (flags R, G, F; C, PT, Pfadtranskription
                                                              [default]),
              • Transkription der Anfrage (flags QSA, QSD, o. g. Pfadtranskription),
              • Umgebungsvariablen (flag E) und
              • Verarbeitungskette (flag H)

              eingreifen. Für all dies bedarf es weiterer Module, wollte man es mit <If ~></If> reproduzieren. Verschiedene Module kann man voraussetzen. Jedoch ist z. B. mod_headers.c, was man für die Manipulation von response header benötigt, leider nicht bei allen Providern zu finden. Vermutlich weil es nicht im Standardmodulsatz enthalten ist/war. Dagegen bekommt, zumindest für mich, mod_setenvif.c in Konfigurationen Handlungsspielraum, denn ich früher nicht für möglich gehalten habe:

              # ein kleines Beispiel für ein Verzeichnis aus dem Downloads  
              # ganz ohne Programme organisiert werden soll, wobei Parameter  
              # "filename" dynamisch  
                
              <IF "-f %{REQUEST_FILENAME}">  
               SetEnvIf REQUEST_URI ".*/(.*)$" set_dl_header=$1  
               Header set Content-Disposition "attachment"  
               Header set Content-Disposition "attachment; filename=\"%{set_dl_header}e\"" env=set_dl_header  
              </IF>  
                
              # Vergleichbar wäre es mit der üblichen Umschreibung  
                
              RewriteEngine On  
              RewriteBase   /  
              RewriteCond   %{REQUEST_FILENAME} !-d  
              RewriteRule   ^(.*)$              -   [L,E=set_dl_header:$1]  
                
              Header set Content-Disposition "attachment" env=set_dl_header  
              Header set Content-Disposition "attachment; filename=\"%{set_dl_header}e\"" env=set_dl_header  
              
              

              Hier ist vielleicht deutlich zu sehen, was ich oben mit einem Adäquat meinte. Auch wenn ich damit etwas weiter abschweife, bedarf es dieser Umschreibung deshalb, weil mod_headers.c auf den reich gedeckten Tisch der internen Variablen des Webservers nicht zugreifen kann, sondern zusätzlich auf mod_setenvif.c angewiesen ist. Das verstehe wer will, ich verstehe es jedenfalls nicht, - der Ist-Zustand eben. ;)

              Gemeinsam ist <If ~></If> und den Möglichkeiten von mod_rewrite.c, dass man über die Konfiguration nicht auf das request body zugreifen kann.

              Fazit: Schade, schade...

              Gruß aus Berlin!
              eddi

  2. Tach!

    Ich möchte nur bei dem Aufruf der index.php mit den oben angegeben GET Parametern (mode=add UND user=42) eine weiterleitung auf eine Subdomain.
    Ist das Möglich?

    Ja. Anleitungen dazu gibt es in genügender Menge im Netz und auch im hiesigen Archiv. Suchstichwörter: mod_rewrite und besonders RewriteCond.

    dedlfix.