Wie erstelle ich einen Zähler,der die Klicks auf einen Link zählt.

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #16
    Stimmt, aber viele Wege führen nach Rom. Da kann man siche noch optimieren, aber später. So funktioniert es und ich muss jetzt erstmal den Rest der Funktionalitäten hin bekommen.

    Also einfach, noch ne Spalte dran und das Datum mit hinein und danach dann später wieder exportiert. Also eigentlich das was ich schon geschrieben habe, nur eben mit der Importnummer.

    Wie krieg ich denn den Counter sicher ?
    Gruß

    Michael

    Comment


    • #17
      Wie kriegt man so einen counter sicher und was sind injections?
      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)

      Comment


      • #18
        OK, ich google mal mit den injections. Dann wäre das vom Tisch.

        Das mit dem Import/Export kann man doch so wie beschrieben machen, oder gibts da auch irgendwas zu beachten von wegen Sicherheit und und und.
        Gruß

        Michael

        Comment


        • #19
          OK, ich google mal mit den injections. Dann wäre das vom Tisch.
          Musst nicht selber suchen, der Smilie ist bereits mit dem Resultat bei Google verlinkt
          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)

          Comment


          • #20
            Ich hab das jetzt mal überflogen und mir die Gegenmassnahmen in php angeguckt und meinen Query so umgestellt.

            PHP Code:
            $query "UPDATE daten SET counter=counter+1 WHERE id = '".mysql_real_escape_string($_GET['id'])."'"
            Wenn ich das richtig verstanden habe, sollte man das bei allen globalen Variablen so in den Query einfügen, richtig?!?

            Mal ne ganz doofe Frage, wie kann ich das denn jetzt testen, ob das sicher ist?
            Gruß

            Michael

            Comment


            • #21
              Original geschrieben von fritzje610
              Mal ne ganz doofe Frage, wie kann ich das denn jetzt testen, ob das sicher ist?
              Die Frage ist nicht doof, darüber haben sich schon viele Leute den Kopf zerbrochen, und endgültig beantwortet ist sie noch nicht.
              Aber überlege mal was passiert, ob mit oder ohne mysql_real_escape_string(), wenn jemand dein Script folgendermassen aufruft:
              Code:
              dein_script.php?id=17 or 1 = 1
              Grundsätzlich sollten alle von einem Benutzer eingegeben Werte auf Gültigkeit überprüft werden.
              Gruss
              H2O

              Comment


              • #22
                OK, verstanden. Mit dem neuen Ausdruck wird auch bei deinem Aufruf nur betroffene Datensatz hochgezählt. Ohne werden alle Datensätze um eins erhöht. Das könnte dann natürlich fatale Folgen haben.
                Bleibt noch die Frage ob man das bei allen Query anwenden sollte?

                Dann noch ne Reloadsperre, das beim neuladen des Satzes nicht mitgezählt wird und das sieht schon richtig gut aus.
                Gruß

                Michael

                Comment


                • #23
                  Original geschrieben von fritzje610
                  OK, verstanden. Mit dem neuen Ausdruck wird auch bei deinem Aufruf nur betroffene Datensatz hochgezählt.
                  Nicht ganz, das mysql_real_escape_string() bringt in diesem Fall gar nichts. Es werden in beiden Fällen alle Sätze geändert. Du kannst das leicht mit
                  PHP Code:
                  echo $_GET['id'] . "<br />";
                  echo 
                  mysql_real_escape_string($_GET['id']) . "<br />"
                  überprüfen. Deshalb sollst du auch die Gültigkeit z.B. mit is_nummeric prüfen. Aber Benutzereingaben können grundsätzlich immer manipuliert werden. Ich kann den Link z.B. 100 mal mit meiner UserId aufrufen, um eventuell an die Spitze zu kommen. Oder noch viel öfter aus einem Script mit einem HTTP-GET-Request.
                  Gruss
                  H2O

                  Comment


                  • #24
                    Das hab ich jetzt nicht verstanden. Kannst Du ir das näher erläutern ???
                    Gruß

                    Michael

                    Comment


                    • #25
                      Was hast du nicht verstanden?
                      Gruss
                      H2O

                      Comment


                      • #26
                        Guten Morgen,

                        ich war gerade am tippen.
                        Ich hab mir das jetzt nochmal genauer angesehen. Wenn ich das richtig verstehe, verhindert das mysql_real_escape_string eigentlich nur, das ich mit einer Eingabe ala
                        Code:
                        datensatz.php?id=1 1=1
                        im Broswer die Zählerstände manipulieren kann. Soweit so gut.

                        Ich habe mal die beiden echos in das Skript eingesetzt
                        PHP Code:
                        echo $_GET['id'] . "<br />";
                        echo 
                        mysql_real_escape_string($_GET['id']) . "<br />"
                        Nun wird aber beim klick auf einen Link die $_GET['id'] für diesen Link auch an allen weiteren Links, die vorher per
                        PHP Code:
                        $query "SELECT * FROM daten";
                        $result mysql_query($query);
                        if (!
                        $result
                             {
                              die(
                        'Ungültige Abfrage: ' mysql_error());
                             } 
                        geholt wurden mit ausgegeben. Dies fange ich dann mit is_int($_GET['id']) ab, richtig?
                        Das ganze muss doch dann in eine if-Schleife, richtig? Mit der if Frage ich ab, ob die $_GET['id'] einen ganzzahligen Inhalt hat, richtig?
                        Wenn ja lasse ich das Script einfach weiterlaufen und im Fehlerfall gebe ich ne Fehlermeldung aus, richtig?
                        Damit ist doch gewährleistet, das kein Unsinn in der Variablen stehen kann, sondern nur eine Zahl. Allerdings werden die ID's dann doch immer noch für alle Sätze ausgegeben. Muss/Sollte das auch abgefangen werden bzw. was muss ich noch tun, dasmit das Wasserdicht ist/wird?

                        Last edited by fritzje610; 10-01-2008, 07:19.
                        Gruß

                        Michael

                        Comment


                        • #27
                          So, if Anweisung mit is_numeric eingebaut. Warum das mit is_int nicht geht verstehe ich nicht, aber sei es mal so.

                          PHP Code:
                          if (is_numeric($_GET['id']))
                          {
                           echo 
                          "</ul>";
                           echo 
                          "</div>";
                           echo 
                          "<div id='contents'>";
                           
                          $query "SELECT * FROM daten WHERE (id = '" $_GET['id'] . "')";
                           
                          $result mysql_query($query);
                           if (!
                          $result
                               {
                                die(
                          'Ungültige Abfrage: ' mysql_error());
                               }
                          //geladenen Datensatz ausgeben
                           
                          while($row mysql_fetch_array($result))
                           {
                            echo 
                          $row['id'];
                            echo 
                          $row['vorname'];
                            echo 
                          $row['nachname'];
                            echo 
                          $row['counter'];
                           }
                           echo 
                          "</div>";
                          }
                          else
                          {
                           echo 
                          "Du hast die Eingabe im Browser manipuliert ! ! !";

                          So, allerdings werden die ID's dann doch immer noch für alle Sätze ausgegeben. Muss/Sollte das auch abgefangen werden? Ich wüsste jetzt nicht wie? Was muss ich noch tun, dasmit das Wasserdicht ist/wird?
                          Gruß

                          Michael

                          Comment


                          • #28
                            So, if Anweisung mit is_numeric eingebaut. Warum das mit is_int nicht geht verstehe ich nicht, aber sei es mal so.
                            Weil die Inhalte von $_GET alle Strings sind ...
                            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                            Comment


                            • #29
                              Dann ists klar warum das mit dem is_int nicht klappt.

                              Ich versuche mich schon den ganzen Morgen in ner Reloadsperre die für Zeit x den Zugriff auf den gerade angeklickten Datensatz sperrt, um den Zähler nicht mit Aktualisieren des Browsers o.ä. unrealistisch in die Höhe trieben zu können. Allerdings wurde in der Schulung nichts mit cookies oder sessions o.ä. gemacht. Das schmökern hat bis jetzt nicht allzu viel gebracht, außer der Erkenntnis, dass es wohl sinnig ist das mit Sessions zu machen. Ich bräuchte mal so einen Anschub/Hinweis in welche Richtung die Realisierung gehen sollte. Auch aus Sicherheitsgedanken usw. heraus.
                              Gruß

                              Michael

                              Comment


                              • #30
                                PHP Code:
                                if (is_numeric($_GET['id'])) 
                                Und was ist mit z.B. mit 1.5, 10e25 oder 0x1A? Das sind auch nummerische Werte. Besser ist du machst
                                PHP Code:
                                if(is_numeric($_GET['id'])){
                                  
                                //konvertiert den Wert auf Integer
                                  
                                $id intval($_GET['id']);
                                  [...]

                                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)

                                Comment

                                Working...
                                X