Ankündigung

Einklappen
Keine Ankündigung bisher.

Zugriff auf öffentliches PHP-Script nur vom eigenen Server erlauben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Zugriff auf öffentliches PHP-Script nur vom eigenen Server erlauben

    Guten Morgen,

    ich habe für meine Website das MyHome Plus Basispaket gebucht. Ich habe ein PHP-Script installiert, das öffentlich zugänglich ist. Ich möchte nun, dass nur der Server auf das Script zugreifen kann, um Ressourcen zu schonen und Missbrauch zu vermeiden. Dazu habe ich eine .htaccess Datei mit folgendem Inhalt in das Script-Verzeichnis abgelegt:

    Code:
    <IfModule mod_authz_core.c>
    # Apache 2.4
    Require host .domain.com
    Require ip 134.119.234.198
    Require ip 2a00:1158:2d:300::c6/120
    </IfModule>
    <RequireAll>
    Require host .domain.com
    Require ip 134.119.234.198
    Require ip 2a00:1158:2d:300::c6/120
    </RequireAll>
    domain.com habe ich natürlich mit meiner eigenen Domain-Adresse ersetzt und die IP4/IP6-Adressen entsprechen denen meines Servers unter admin.df.eu > Auftragsinformationen > Accountinfos.

    Leider funktioniert es nicht. Das PHP-Script ist in meine Website auf dem gleichen Server eingebunden, aber läuft mit der .htaccess nicht mehr. Ich habe auch Varianten probiert ohne IP6-Adresse, ohne mod_authz_core.c, etc.

    Ich habe die Informationen auf dieser Seite berücksichtigt: https://httpd.apache.org/docs/2.4/howto/access.html


    Hat jemand einen Tipp, was nicht korrekt sein könnte?

    Vielen Dank!

    Philip

    #2
    Wenn du das Skript nicht öffentlich haben willst, dann lege es doch einfach in einen Pfad außerhalb des Web-Roots.

    ​​​​​​
    MfG,
    masterframe

    Kommentar


      #3
      Es soll via HTTPS aufrufbar sein, aber nur von meinem eigenen Webhost und nicht externen Seiten. Daher funktioniert es nicht das Script ausserhalb des Web-Roots abzulegen.

      Kommentar


        #4
        Ich vermute mal, dass trotz dem externen Aufruf des Skripts nicht die öffentlichen IPv4/IPv6 Adresse benutzt wird sondern 127.0.0.1 bzw. ::1.
        Am Besten mit PHP diese Informationen in eine Datei speichern und einen Testaufruf durchführen.

        Kommentar


          #5
          Mit der lokalen IP-Adresse hat es leider auch nicht funktioniert. Soweit ich weiss funktioniert die lokale Standard-IP bei Domainfactory nicht. Oder war das nur in Bezug auf die Verbindung mit dem MySQL-Server?

          Hast du / habt ihr noch weitere Vorschläge? 😀

          Kommentar


            #6
            Hast du den zweiten Vorschlag auch probiert?
            Am Besten mit PHP diese Informationen in eine Datei speichern und einen Testaufruf durchführen.
            1) Entferne die entsprechenden Einschränkungen in der .htaccess Datei.
            2) Es gibt eine PHP Variable, welche beim Aufruf des Skript die IP-Adresse speichert. Diese im Skript ausgeben.
            3) Das Skript über curl aufrufen und dann siehst welche IP-Adresse verwendet wird.

            Kommentar


              #7
              Nein, ich hatte nicht ganz verstanden, was du meintest. Ich habe nun Folgendes probiert:

              <?php
              print $_SERVER['SERVER_ADDR'];
              ?>
              Dies zeigt diese IP-Adresse (134.119.234.198), die der entspricht, die unter Accountinfos angezeigt wird.

              Kommentar


                #8
                Der Domainfactory-Support hatte mir mal Folgendes geschrieben, aber das hat mir auch nicht weitergeholfen:

                Es können die Standard Apache 2.4 Regeln verwendet werden. Wie Sie bspw. IPs blocken können Sie hier erfahren[1]

                [1] https://httpd.apache.org/docs/2.4/howto/access.html

                Kommentar


                  #9
                  RequireAny statt RequireAll bringt leider auch kein anderes Ergebnis, wobei das eigentlich eher passen müsste.

                  Kommentar


                    #10
                    Was möchgest du mit dieser Zeile erreichen?
                    Code:
                    Require host .domain.com

                    Kommentar


                      #11
                      Ich habe alle möglichen Kombinationen getestet. Wenn die IP-Adresse nicht funktioniert, dachte ich, dass es evtl. mit dem Hostnamen meiner Website funktioniert, in die das PHP-Script integriert ist. Ich habe diese Zeile aktuell auskommentiert und nur die IP-Adressen probiert - ohne Ergebnis.

                      Kommentar


                        #12
                        Versuch es einmal so:
                        Code:
                        <RequireAny>
                        Require ip 134.119.234.198
                        </RequireAny>
                        Mit welchen Befehl rufst du das Skript auf?
                        Was gibt das Skript an Output zurück?

                        Kommentar


                          #13
                          Das funktioniert leider auch nicht. Das Script rufe ich einfach in einer HTML-Seite auf:

                          HTML-Code:
                          <img src="http://www.domain.com/image.php?id=123" alt="" />

                          Kommentar


                            #14
                            In diesem Fall ruft ja nicht der Server das Skript auf, sondern dein Rechner bzw. Browser.
                            Damit stimmt natürlich auch nicht die IP-Adresse überein, so dass .htaccess erst einmal korrekt arbeitet.

                            Kommentar


                              #15
                              Vielen Dank! Nun ist es klar für mich. Ein Entwickler hatte empfohlen es so zu lösen. Daher bin ich davon ausgegangen, dass es funktioniert?

                              Welche anderen Möglichkeiten gibt es den Zugang von extern auf die Datei image.php zu beschränken, aber den Aufruf vom eigenen Server via HTTPS zu ermöglichen? Gestern habe ich die Startseite in eine PHP-Seite umgewandelt und die Links zu image.php via PHP-Include eingebunden. Allerdings wird dann wahrscheinlich immer noch die Client IP verwendet, weil die Links nicht in PHP ausgeführt werden.

                              Kommentar

                              Lädt...
                              X