ext. javascript vor unerlaubtem zugriff schützen

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

  • ext. javascript vor unerlaubtem zugriff schützen

    moin,

    ich versuche gerade einen javascript-spamschutz zu bauen und das externe javascript vor "unerlaubter benutzung" zu schützen. soweit klappt es auch.

    - die aufrufende php-datei setzt eine kontroll-variable in die session
    - die aufgerufene php-datei gibt den js-code nur aus, wenn die variable gesetzt ist
    -- in dem fall wird nach der ausgabe die variable wieder gelöscht
    - bei einem direktaufruf gibt es also keinen js-code
    - gibt es aber keinen js-code, gibt es auch keinen validen formularversand


    das ganze sieht so aus:
    PHP-Code:
    <?php
    session_start
    ();
    $error TRUE;

    if(!empty(
    $_POST))
    {
        if(isset(
    $_SESSION['secCheck']['var']))
        {
            
    $error TRUE;

            if(
    $_SESSION['secCheck']['var'] == $_POST[$_SESSION['secCheck']['key']])
            {
                
    $error FALSE;
                unset(
    $_SESSION['secCheck']);
            }
            else
                
    $error TRUE;
        }
    }
    if(!
    $error)
    {
        echo 
    '<pre>';
        
    print_r($_POST);
        
    print_r($_SESSION);
    ?>
         <b>Ich bin drin!</b>
    <?php
    }
    else
    {
    $_SESSION['jssec'] = 1;

    ?>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
        <input name="secCheck" type="password"><br>
        Sicherheitscode eingeben.<br>
        <input type="submit">
        <script type="text/javascript" 
            src="jscheck.php?<?php echo session_name();?>=<?php echo session_id();?>">
        </script>
        <noscript><p><b>Ohne JavaScript kommse nisch rein!</b></p></noscript>
    </form>
    <?php
    }
    ?>
    die jscheck.php:
    PHP-Code:
    <?php
    session_start
    ();
    function 
    randPass($anz=6)
    {
        
    // passwort erzeugen
        
    $pass md5 (uniqid (rand()));
        return 
    substr($pass0$anz);
    }

    if(isset(
    $_SESSION['jssec']))
    {
        unset(
    $_SESSION['jssec']);
        
        
    $_SESSION['secCheck'] = array();
        
    $_SESSION['secCheck']['var'] = randPass(10);
        
    $_SESSION['secCheck']['key'] = randPass(5);
        
        echo 
    'document.write(\\'<input type="hidden" name="'.$_SESSION['secCheck']['key'].'" 
        
    value="'.$_SESSION['secCheck']['var'].'">\\');';
    }
    ?>
    bevor jetzt jemand nölt "bäh das geht aber nur mit aktiviertem javascript", dem sei gesagt:
    1. ist das so gewollt
    2. könnte man im <noscript>- bereich ein captcha einfügen

    ziel des ganzen ist es, "einfache" formulare vor missbrauch durch z.B. spambots zu schützen.

    nun zum knackpunkt:
    der spass ist relativ leicht zu umgehen:
    PHP-Code:
    $fp fopen('http://www.domain.de/jstest.php?PHPSESSID=e05744a0d5057 ... 35''r');
    echo 
    implode(''file('http://www.domain.de/jscheck.php?PHPSESSID=e05744a0d5057 ... 35')); 
    funktioniert sogar (war ja zu erwarten ). damit kann ich nun mit fsockopen() das form senden und den schutz umgehen. toll.

    ziel:
    die jscheck.php muss geschützt werden. die einzige möglichkeit, die mir dazu einfällt ist ein referer-check. leider unsicher, weil man ihn abschalten kann.

    fällt jemandem eine andere serverseitige möglichkeit ein?


    danke für die anteilnahme
    Kissolino.com

  • #2
    Du könntest in jstest.php mit session_regenerate_id eine neue ID generieren lassen und ggf. die alte Session löschen.

    Hilft dir das?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      ohne es jetzt getestet zu haben, eigentlich nicht.

      wenn ich die formularseite mit fopen() "anstubse", wird die session-variable ja gesetzt. da das javascript nicht ausgeführt wird, kann ich ja mit einer gehijackten session-id direkt drauf zugreifen. ob ich da nun eine neue session starte, sollte doch unerheblich sein.

      oder ich hab was falsch verstanden und du bringst licht in mein dunkel
      Kissolino.com

      Kommentar


      • #4
        Könntest ggf den direkten Aufruf von jscheck.php unterbinden, indem du diese Datei in die andere mittels include() einbindest.
        Wenn dann $_SERVER['PHP_SELF'] gleich jscheck.php ist, dann wurde die Datei direkt aufgerufen --> Abbruch mittels exit.
        Das Problem einer geklauten Session wirst du imho nicht umgehen können.

        Gruss

        tobi
        Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

        [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
        Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

        Kommentar


        • #5
          Original geschrieben von jahlives
          ... indem du diese Datei in die andere mittels include() einbindest...
          dann steht ja das im quelltext, was ich gerne verbergen möchte.
          Kissolino.com

          Kommentar


          • #6
            Ich hab's so gedacht:

            - jstest.php wird aufgerufen
            - jscheck.php wird automatisch aufgerufen (src-Attribut)
            - jscheck.php generiert eine neue Session-ID und schreibt dort die zu prüfenden Daten rein
            - jstest.php wird abgeschickt und sollte doch (wenn mit Cookies geabreitet wird) die neue ID schicken (vielleicht)

            Wenn ich mich täusche, dann btte ich viemlals und untertänigst um Entschuldigung.

            Wirklich sicher sein kannst du dir aber trotzdem nicht *g*
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              dann steht ja das im quelltext, was ich gerne verbergen möchte.
              Aber wie willst du denn einen JS Part vor dem User verbergen ? Oder verstehe ich das jetzt falsch ? Das ist doch genau das was du machen willst?
              Serverseitig fällt mir dann nur noch das gute alte Captcha ein. Alles andere wird imho nicht wie gewünscht funzen, denn auch eine neue Session ID müsste an den Client übermittelt werden. Und wenn die geraten/abgefangen wird, dann geht ein direkter Aufruf ja in jedem Fall

              Gruss

              tobi
              Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

              [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
              Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

              Kommentar


              • #8
                hmm... ohne genau gelesen zu haben - wenn Javascript eh voraussetzung ist, dann nutz das einfach auch aus.

                Simples Beispiel als Anregung um evtl. von dir verfeinert zu werden:

                - Deine PHP-Datei liefert das Form aus inklusive eines HiddenInputs mit z.B. ner Zufallszahl.
                - Ein Javascript in dem Formular liest den Wert aus, stellt ne verrückte Rechnung damit an und schreibt das Ergebnis in nen weiteren HiddenInput
                - das "empfangende" Formular liest nun die beiden HiddenInputs aus und prüft ob der HiddenInput mit dem Ergebnis vom Javascript zum HiddenInput von der Auslieferung passt - wenn ja, dann gut - wenn ned, dann *close* & *trash*

                Jetzt müsste sich jemand schon die Mühe machen seinen Spambot auf dein JS anzupassen, damit das Form gespamt werden kann.
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar


                • #9
                  Re: ext. javascript vor unerlaubtem zugriff schützen

                  Original geschrieben von Wurzel
                  die einzige möglichkeit, die mir dazu einfällt ist ein referer-check. leider unsicher, weil man ihn abschalten kann.
                  OffTopic:
                  Dass JS deaktiviert sein kann, stört dich doch nach eigenem Bekunden genauso wenig ...? *g*


                  Aber Referrer ist für sowas eh absolut untauglich - den dürfte so gut wie jeder Spammer mitschicken.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    Re: Re: ext. javascript vor unerlaubtem zugriff schützen

                    Original geschrieben von wahsaga
                    OffTopic:
                    Dass JS deaktiviert sein kann, stört dich doch nach eigenem Bekunden genauso wenig ...? *g*
                    ich wusste doch, dass einer nöhlt ... liest du oben bitte nochmal nach, was "plan b" ist bzw. sein könnte.

                    @jahlives
                    im normalen ablauf mache ich das schon. bei einem reinen browser-zugriff läuft der user auch durch wie gewünscht. er sieht nicht, was das javascript macht. und selbst wenn, spielt es keine rolle. es ist a) zu spät, er kann den ablauf b) nicht automatisieren.

                    @quetschi
                    könnte ich mal ausprobieren - ist evtl. noch ein kleiner umweg nötig.

                    ich bin trotzdem vom referer noch nicht ganz weg. gibt ja noch .htaccess ... ich geh wieder basteln.


                    ps: ja, ich weiss, dass das nicht absolut sicher ist. ein captcha bietet deutlich mehr. ist aber für erwünschte besucher auch deutlich umständlicher. und es gibt ein paar anwendungsbereiche, wo bot-einträge zwar nicht kritisch aber äusserst lästig sind. die haben es jetzt schon etwas schwerer aber ich hätte es gerne noch etwas "aufgebohrt". vielleicht ist die gesamte idee aber auch total beschi****
                    Kissolino.com

                    Kommentar


                    • #11
                      Wenn ich's recht überblicke, willst Du, dass der Benützer zwei Aufrufe macht:
                      -GET Formular
                      -POST Daten.

                      Der Spammer hingegen macht
                      -GET Formular
                      -POST Daten
                      -POST Daten

                      oder überhaupt nur
                      -POST Daten
                      -POST Daten

                      . Das sollte auch schon die Lösung der Frage ergeben (oder andeuten usw.).

                      Kann der Spammer hingegen auch
                      -GET Formular
                      -POST Daten
                      -GET Formular
                      -POST Daten
                      sind captchas, Zeitsperren und dergleichen angesagt (wie schon oben: andeutungsweise).

                      Kommentar


                      • #12
                        gedanke...

                        schlagwort Cookies...

                        Kommentar


                        • #13
                          Re: Re: Re: ext. javascript vor unerlaubtem zugriff schützen

                          Original geschrieben von Wurzel
                          vielleicht ist die gesamte idee aber auch total beschi****
                          Kissolino.com

                          Kommentar

                          Lädt...
                          X