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

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

  • #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

    Kommentar


    • #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)

      Kommentar


      • #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

        Kommentar


        • #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)

          Kommentar


          • #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

            Kommentar


            • #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

              Kommentar


              • #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

                Kommentar


                • #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

                  Kommentar


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

                    Michael

                    Kommentar


                    • #25
                      Was hast du nicht verstanden?
                      Gruss
                      H2O

                      Kommentar


                      • #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?

                        Zuletzt geändert von fritzje610; 10.01.2008, 08:19.
                        Gruß

                        Michael

                        Kommentar


                        • #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

                          Kommentar


                          • #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]

                            Kommentar


                            • #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

                              Kommentar


                              • #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)

                                Kommentar

                                Lädt...
                                X