Scriptschutz

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

  • Scriptschutz

    Hallo zusammen,

    ich habe bei mir auf der Page eine Highscore Liste welche per PHP gefüttert wird.

    Spiel sendet eine Variable ans Script und Script trägt ein.
    Soweit alles gut im Paradis.

    Was aber (ist mir gerade erst ein und aufgefallen), wenn der User das Script direkt aufruft und den Parameter übergibt?

    á la : highscore.php?score=10000000000000

    Das geht bei mir im Moment.
    Wie kann man das verhindern?

    Dank und Gruß
    Marcus

  • #2
    es wäre noch interesant zu wissen in was das spiel gemacht ist.

    php c++ c asp flash .......

    und wie kommt der user zu dem scriptnamen. (highscore.php
    Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

    Kommentar


    • #3
      das Spiel ist in Flash gemacht.
      Eigentlich sollte der User nie an den Scriptnamen kommen können.

      Ich kann mir nur bei einem User den plötzlichen und auffallend uniformen Punktestand bei allen Games nicht anders erklären.

      Kommentar


      • #4
        Wie kann man das verhindern?
        z.B. indem du neben ?score=blabla auch eine Sesssion mitübergibst, die das aufrufende Script (jenes das die Daten an dein Highscore schickt) generiert.
        Nur wenn eine gültige Session übergeben wird, kannst du ziemlich sicher sein, dass der Aufruf von DEINEM aufrufenden Script kommt.
        Schau mal im Man Session

        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
          danke. das mit der Session habe ich auch schon überlegt.
          Kann man denn 2 Session(s) gleichzeitig laufen haben?
          Denn bisher läuft ja zu jedem angemeldetem User eine Session.

          Kommentar


          • #6
            session halte ich auch für relativ witzlos - da brauche ich auch nur einfach mit 'nem sniffer den datenverkehr abhören, wenn das flash einen highscore überträgt. schon habe ich die SID, und kann einen request mit meinem wunsch-score hinterherschicken.


            angebrachter wäre vielleicht, wenn flash den score verschlüsselt überträgt, oder halt noch einen verschlüsselten prüf-wert (z.b. MD5 von score und angehängter geheimer zeichenkette o.ä.)
            dann könnte das PHP-script überprüfen, ob die daten höchstwahrscheinlich plausibel sind oder gefaked.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              -> Wahsaga: Ah, verstehe.
              Ich müsste also von Flash aus einfach noch ein paar Werte mitübergeben und diese dann im Script abfragen?

              Klingt eigentlich sicher und einfach.
              Danke.

              Kommentar


              • #8
                Ne halt. Blöde Frage: aber wenn Flash das Script aufruft und die Parameter übergibt, dann sieht der User das doch genauso, wie er den Parameter für den Punktestand sieht.. oder?

                Kommentar


                • #9
                  Du kannst wahrscheinlich soviele Sessions laufen lassen, wie dein Server Speicher hat.
                  Wenn aber zwei Sessions, dann aber mit unterschiedlichen Namen. Ich mache das meist so (wenn ich zwei Sessions brauche):
                  PHP-Code:
                  $_SESSION['public'] = session_id();
                  $_SESSION['restricted'] = session_id(); 
                  Danach kannst du eine Session immer prüfen ob sie z.B. in public oder restricted enthalten ist.
                  In deinem Falle würde ich, sobald der Highscore fertig zum "verschicken" ist, eine neue Session machen (am besten auch mit einem neuen Namen) und diese an den QueryString für Highscore dran hängen.
                  Highscore prüft ob die Session gültig ist z.B.
                  PHP-Code:
                  if(strstr($_SERVER['QUERY_STRING'],"$_SESSION[restricted]"))
                  {
                     
                  //Prüfung ok und Daten können verarbeitet werden
                  }
                  else
                  {
                     
                  //jemand hat versucht das Script direkt aufzurufen

                  So in der Art müsste es gehen.
                  Gruss

                  tobi

                  EDIT:

                  und wenn Highscore die Session nach Gebrauch shredderd, dann ist die Session auch nur für einen Zugriff gültig. Ein Sniffer würde imho nur eine abgelaufene Session erhalten.

                  Zuletzt geändert von jahlives; 02.05.2005, 19:59.
                  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


                  • #10
                    ok, danke.
                    Scheitert aber daran, daß Flash sowas nicht kann, ich also vorher noch ein Script aufrufen müsste.

                    Mir ist es nach wie vor schleierhaft, wie der User das im jetzigen Zustand geschafft hat

                    Kommentar


                    • #11
                      es ist schwer zu verhindern das der user es nicht facken kann , wenn der user die swf datei entschlüsselt/dekodiert/entpackt (was auch immer) hat, und das actionscript sieht, ist es fast unmöglich zu verhindern das nur das script es senden kann.
                      Zuletzt geändert von Rolandbar; 02.05.2005, 20:21.
                      Onlie Browsergame: http://www.war-of-empire.de <-- 2. Weltkrieg

                      Kommentar


                      • #12
                        Alternative, XML benutzen, da kann Flash mehr mit als mit PHP!

                        Kommentar


                        • #13
                          Original geschrieben von jahlives
                          Du kannst wahrscheinlich soviele Sessions laufen lassen, wie dein Server Speicher hat.
                          Wenn aber zwei Sessions, dann aber mit unterschiedlichen Namen. Ich mache das meist so (wenn ich zwei Sessions brauche):
                          [PHP]
                          $_SESSION['public'] = session_id();
                          $_SESSION['restricted'] = session_id();
                          wie kommst du darauf, dass du dadurch zwei sessions hättest?

                          und wenn Highscore die Session nach Gebrauch shredderd, dann ist die Session auch nur für einen Zugriff gültig. Ein Sniffer würde imho nur eine abgelaufene Session erhalten.
                          ich brauche die daten ja blos abfangen und nicht weiterleiten.
                          order ich sorge einfach per simplem (lokalem) proxy, den ich dazwischen schalte, dass im request score=xyz durch score=9999999 ausgetauscht wird ...
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Wenn jemand deine Flash-Datei entschlüsselt, dann hast du sowieso verloren, da kannst du nichts machen, also beshcäftigen wir uns nicht mehr damit.

                            Der nächste denkbare Fall wäre es, nicht den Highscore sondern den verschlüsselten Higscore zu übertragen.
                            Du musst in Flash verschlüsseln und in PHP entschlüsseln.
                            Den Code des PHP-Skripts sieht ja im Normalfall niemand, der das Spiel spielt und die Flash-Datei wird ja wie gesagt nicht entschlüsselt, also solltze es annähernd unmöglich sein, herauszufinden, was 999.999.999 Punkten entspricht, nur wenn man weiß, dass hjgio/%E)/298zvca)(=adfh087(&)TGAyy für 789 Punkte steht.
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              wie kommst du darauf, dass du dadurch zwei sessions hättest?
                              Ich habe dann doch eine Session unter $_SESSION['public'] und eine unter $_SESSION['restricted']. Die können zwar gleich sein, aber da sie nicht derselben $_SESSION zugeordnet sind, kann man sie sehr wohl unterscheiden und auch dementsprechend darauf prüfen
                              Oder sehe ich das komplett falsch ?

                              Gruss

                              tobi

                              EDIT:

                              in diesem Link habe ich die Session bereits "verbraucht" und jede weitere Abfrage wird geblockt.
                              http://www.tobisworld.ch/page/script...ild=pics38.jpg

                              Zuletzt geändert von jahlives; 03.05.2005, 16:29.
                              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

                              Lädt...
                              X