Finalplayer_Ryu: _SERVER["HTTP_REFERER"] sicher?

Meine Frage ist, ob jemand _SERVER["HTTP_REFERER"] so verändern kann, dass eine solche Abfrage (siehe unten) nutzlos wird?

<?PHP
if(!strcmp($_SERVER["HTTP_REFERER"], "http://testurl.de/testseite.html))
<!-- alles ok -->
else
<!-- Aufruf von einer falschen seite -->
?>

  1. Ciao,
    Jedermann kann einstellen, dass sein User Agent keinen Referer versendet.Im Firefox unter about:config zu finden, in Opera sogar im UI. Das macht solche Abfragen zwar nicht sinnlos, nimmt ihnen aber die Eindeutigkeit der Aussage.
    Ciao N

  2. Hallo Finalplayer_Ryu.

    Meine Frage ist, ob jemand _SERVER["HTTP_REFERER"] so verändern kann, dass eine solche Abfrage (siehe unten) nutzlos wird?

    Jegliche vom Client empfangenen Daten können von ebendiesem nach Belieben verändert werden. Grundsätzlich darfst du also keinen Eingabedaten vertrauen, der HTTP-Referer zählt dazu.

    Einen schönen Mittwoch noch.

    Gruß, Mathias

    --
    ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
    debian/rules
    1. Jegliche vom Client empfangenen Daten können von ebendiesem nach Belieben verändert werden. Grundsätzlich darfst du also keinen Eingabedaten vertrauen, der HTTP-Referer zählt dazu.

      Wie kann ich mir dann sicher sein, dass meine php-Datei nur von einem bestimmten Seite aufgerufen wird?

      1. Hi,

        Wie kann ich mir dann sicher sein, dass meine php-Datei nur von einem bestimmten Seite aufgerufen wird?

        das kannst Du nicht. HTTP kennt kein "von".

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
        1. Ich weiss nicht ob das nen großen Unterschied für meine Frage macht, aber es soll so sein, dass nur Seiten von meiner eigenen Website auf bestimmte PHP-Scripte, die sich ebenfalls auf dieser Website befinden,  zugreifen können, da muss es doch was geben, oder?

          1. Hallo Finalplayer_Ryu.

            Ich weiss nicht ob das nen großen Unterschied für meine Frage macht, aber es soll so sein, dass nur Seiten von meiner eigenen Website auf bestimmte PHP-Scripte, die sich ebenfalls auf dieser Website befinden,  zugreifen können, da muss es doch was geben, oder?

            Klingt, als wolltest du einen Session-Mechanismus integrieren.

            Einen schönen Donnerstag noch.

            Gruß, Mathias

            --
            ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
            debian/rules
            1. Klingt, als wolltest du einen Session-Mechanismus integrieren.

              Session hab ich mir auch schon überlegt, da käme mir die Frage wie sicher das ist, *mal kurz in den Link gucken*, dann müsste ich meine User mit Cookies nerven, was auch nicht grad optimal ist und weiters frage ich mich was ist, wenn nun jemand von einer anderen Seite aus die gleiche Sessionvariable nimmt und den Wert richtig belegt, dann kommt der dann doch auch auf mein Scipt, oder?

              1. Hallo Finalplayer_Ryu,

                Session hab ich mir auch schon überlegt, da käme mir die Frage wie sicher das ist, *mal kurz in den Link gucken*, dann müsste ich meine User mit Cookies nerven, was auch nicht grad optimal ist und weiters frage ich mich was ist, wenn nun jemand von einer anderen Seite aus die gleiche Sessionvariable nimmt und den Wert richtig belegt, dann kommt der dann doch auch auf mein Scipt, oder?

                Sessions sind recht sicher. Wobei ich immer noch nicht ganz verstehe, wieso du bestimmte php-Dateien schützen willst. Wer soll sie wie unter welchen Umständen ausführen dürfen? Sind sie evtl. nur für includes gedacht? Dürfen nur "angemeldete" Benutzer die Datei aufrufen? Ich sehe den Sinn einer Referer-prüfung bzw. einer Referer-ähnlichen Session-Prüfung nicht.

                Jonathan

                1. Sessions sind recht sicher. Wobei ich immer noch nicht ganz verstehe, wieso du bestimmte php-Dateien schützen willst.

                  Ich will die Dateien im ersten Schritt vor externen Zugriff schützen, da es genügend Leute gibt, die sich nen Spass draus machen und solche Dateien rekursiv Aufrufen, weils so viel Spass macht...
                  Wenn ich das geschafft habe muss ich nur noch so ein "vermurkstes" Bild bei der Seite, die das Script aufruft, reingeben wo der User dann die Buchstabenzahlencombi eingeben muss. Ich will einfach verhindern, dass jemand unnötig viel Traffic verursacht, weil ihm grad langweilig ist

                  Wer soll sie wie unter welchen Umständen ausführen dürfen?

                  Beim Scipt handelt es sich um ein Registrierungs-Script, welches die Daten in eine MySQL Tabelle reinschreibt. Dieses wird von einem Formular aufgerufen. Aber eigentlich möcht ich alle meine Scripte schützen.

                  Aber mal so ne kurze Frage in den Raum gestellt, die Session-ID wird an den User übertragen, gilt dies für jede Session-Variable, die man anlegt?

                  1. Hallo Finalplayer_Ryu,

                    Ich will die Dateien im ersten Schritt vor externen Zugriff schützen, da es genügend Leute gibt, die sich nen Spass draus machen und solche Dateien rekursiv Aufrufen, weils so viel Spass macht...

                    Da helfen aber weder Referrer noch Sessions. Referrer kann man Faken und Sessions kann man ja einfach durch Seitenaufrufe erzeugen (wenn auch nicht faken).

                    Wenn ich das geschafft habe muss ich nur noch so ein "vermurkstes" Bild bei der Seite, die das Script aufruft, reingeben wo der User dann die Buchstabenzahlencombi eingeben muss. Ich will einfach verhindern, dass jemand unnötig viel Traffic verursacht, weil ihm grad langweilig ist

                    Das ist schon eine Lösung, die mehr Erfolg bringen wird und bei CPU/Datenbankintensiven Vorgängen sicher sinnvoll.

                    Aber mal so ne kurze Frage in den Raum gestellt, die Session-ID wird an den User übertragen, gilt dies für jede Session-Variable, die man anlegt?

                    Der User kriegt nur die Session ID zu sehen. Die Session-Variablen werden alle auf dem Server gespeichert.

                    Jonathan

                    1. Das ist schon eine Lösung, die mehr Erfolg bringen wird und bei CPU/Datenbankintensiven Vorgängen sicher sinnvoll.

                      Das Problem ist ja, dass er einfach nur die php-Datei aufrufen muss und da hilft so ein Bild nicht, wenn er die Adresse von der php-Datei hat.

                      Nunja, was solls, ich habe nun ein paar Möglichkeiten, alle nicht sauber, aber egal, entweder
                       - ich benutze referer und sage, alle die den ausgeschaltet haben, haben Pech und sind selber schuld
                       - ich nerv die Leute mit, "Sie können diese Seite nur verwenden, wenn Cookies blah blah..."
                       - ich benutz die Session-ID

                      Nunja ich bin am ehesten für die referer-Methode, da ich glaube, dass die wenigsten dies ausgeschaltet haben, ich für meinen Teil wüsste nicht, wo ich das beim IE oder FF ausschalten könnte und ansonsten die Session-ID.

                      Ich danke mal jeden, der mir geholfen hat!!!

                      CU, bei meiner nächsten Frage^^

                      1. Nunja ich bin am ehesten für die referer-Methode, da ich glaube, dass die wenigsten dies ausgeschaltet haben, ich für meinen Teil wüsste nicht, wo ich das beim IE oder FF ausschalten könnte und ansonsten die Session-ID.

                        Viele haben den Referer aus und wissen es garnicht, oft filtern den z.B. personal Firewalls raus... Gut 3-10% der Besucher meiner Website kommen von der Seite "Field blocked by outpost" ;)

                        Ich versteh aber dein Problem nicht... Du willst ein Captcha zum Abtippen in das Formular einbauen, demnach muss doch deine PHP Datei nur die große Datenmenge ausgeben, wenn das Captcha korrekt ist - andernfalls soll es hald 0k ausgeben und fertig. Alles andere macht keinen Sinn?!

                        1. Ich versteh aber dein Problem nicht... Du willst ein Captcha zum Abtippen in das Formular einbauen, demnach muss doch deine PHP Datei nur die große Datenmenge ausgeben, wenn das Captcha korrekt ist - andernfalls soll es hald 0k ausgeben und fertig. Alles andere macht keinen Sinn?!

                          Das Problem ist, dass ich nicht alle Scripts auf diese Weise schützen kann, denn dann würd keine mehr auf meine Seite gehen, aber egal, mir fällt schon irgendwas kniffliges ein.

                          1. Ich versteh aber dein Problem nicht... Du willst ein Captcha zum Abtippen in das Formular einbauen, demnach muss doch deine PHP Datei nur die große Datenmenge ausgeben, wenn das Captcha korrekt ist - andernfalls soll es hald 0k ausgeben und fertig. Alles andere macht keinen Sinn?!

                            Das Problem ist, dass ich nicht alle Scripts auf diese Weise schützen kann, denn dann würd keine mehr auf meine Seite gehen, aber egal, mir fällt schon irgendwas kniffliges ein.

                            Also wenn bei dir jeder Klick einige MB an Daten runterläd, würd ich auch so deine Seite nicht mehr besuchen...

                            Geht es dir eigentlich darum, dass jemand absichtlich deine Seiten dauernd öffnet, oder geht es dir um Links die auf fremden Seiten plaziert wurden? Für Links von fremden Seiten kannst du den Referer schon nutzen, aber nicht indem du prüfst ob der User von deiner Seite kommt, sondern indem du prüfst ob er nicht von einer anderen Seite kommt. Somit erlaubst du auch die, deren Referer geblockt wird. Das ist aber nur ein kleiner Teil, Traffik durch unerwünschte Links kann man so effektiv verhindern.

                            Wenn es so wahnsinnig wichtig ist, setz ein Captcha und Sessions ein. Dann muss der User einmal das Captcha eintippen, das wird in der Session vermerkt, und dann machst es so, dass er das Captcha für den Rest des Tages (oder für X Klicks auf der Seite) nicht mehr benötigt. Sessions benötigen auch nicht zwangsweise einen Cookie.

                            1. Also wenn bei dir jeder Klick einige MB an Daten runterläd, würd ich auch so deine Seite nicht mehr besuchen...

                              Keine Ahnung wie du auf sowas kommst, ich habe ja nie was von mehreren MB pro Seitenaufruf bzw. Klick geredet.

                              Geht es dir eigentlich darum, dass jemand absichtlich deine Seiten dauernd öffnet, oder geht es dir um Links die auf fremden Seiten plaziert wurden?

                              Das erstere

                              Für Links von fremden Seiten kannst du den Referer schon nutzen, aber nicht indem du prüfst ob der User von deiner Seite kommt, sondern indem du prüfst ob er nicht von einer anderen Seite kommt. Somit erlaubst du auch die, deren Referer geblockt wird. Das ist aber nur ein kleiner Teil, Traffik durch unerwünschte Links kann man so effektiv verhindern.

                              Das versteh ich nicht ganz, denn
                              "von meiner Seite" entspricht "nicht von einer anderen Seite".
                              Das musst du mir genauer erklären.

                              1. "von meiner Seite" entspricht "nicht von einer anderen Seite".

                                Nein, denn "nicht von einer anderen Seite" setzt voraus, dass der Referer überhaupt eine Seite enthält. Du prüfst also, ob der Referer eine URL enthält und ob diese nicht deine ist.

                      2. Hallo Finalplayer_Ryu,

                        Das Problem ist ja, dass er einfach nur die php-Datei aufrufen muss und da hilft so ein Bild nicht, wenn er die Adresse von der php-Datei hat.

                        Doch, genau das ist ja der Sinn.

                        Prüfe am Anfang der php-Datei ob der Benutzer einen Bildausfüllcode mitgeliefert hat und ob der korrekt ist. Wenn nicht, dann führe einfach deine aufwändige Berechnung nicht durch.

                        Jonathan