Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Gefälschte Formulare - Wie gehe ich am Besten mit input Daten um?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Gefälschte Formulare - Wie gehe ich am Besten mit input Daten um?

    Hallo zusammen,

    um ein Produkt dem Warenkorb hinzuzufügen, verwende ich folgenden Code:
    PHP-Code:
    if (isset($_POST['pid']) && isset($_POST['quantity'])){
        
    $pid intval($_POST['pid']);
        
    $quantity intval($_POST['quantity']);
        if (
    $pid && $quantity){
            
    SessionManagement::start();
            
    SessionManagement::getCart()->add($pid$quantity);
        }

    Nun kann eine Person mit einem gefälschten Formular natürlich ein Produkt mit einer x-beliebigen "pid" Nummer in den Warenkorb legen, was natürlich schlecht ist. Eine Möglichkeit wäre natürlich, zu überprüfen, ob $_POST['pid'] in der Produkttabelle existiert. Eine andere Möglichkeit, die mir in den Sinne gekommen ist, ist zu überprüfen, ob das Formular den korrekten Referer hat. Wobei hier oftmals darauf verwiesen wird, dass $_SERVER['HTTP_REFERER'] keine sichere Angabe ist.

    Komme ich um eine Datenbankabfrage nicht herum oder gibt es sichere Alternativen?

  • #2
    Naja du solltest schon sichergehen ob das Produkt das er sich in den Warenkorb legen möchte überhaupt existiert. Von daher wäre so eine Abfrage sicherlich nötig.

    Referer überprüfen bringt dir gar nichts. Dann kann trotzdem das Formular verändert werden obwohl der Referer gleich bleibt.

    Kommentar


    • #3
      Und am besten noch ein token hinhängen, damit wirklich der Request nur von deiner Seite kommen kann...
      Signatur:
      PHP-Code:
      $s '0048656c6c6f20576f726c64';
      while(
      $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

      Kommentar


      • #4
        @ ByStones

        D.h. bspw. ein sha1-Hash aus einer konfusen und wirren, von mir festgelegten Konstante und der pid ?

        Kommentar


        • #5
          Verstehe auch nicht ganz das Problem... im Endeffekt musste dann doch eh das Produkt auf der Seite anzeigen...
          und dafür machste doch sicherlich auch ne Abfrage?

          cu
          Grüße
          Destruction
          "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

          Kommentar


          • #6
            Zitat von Trainmaster Beitrag anzeigen
            D.h. bspw. ein sha1-Hash aus einer konfusen und wirren, von mir festgelegten Konstante und der pid ?
            Nein, einfach eine zufällige Zeichenkette. Dabei geht es nicht darum sicherzustellen, dass es das Produkt gibt sondern darum, dass der Request auch wirklich vom User kommt. Google einfach mal nach "Cross Site Request Forgery"/"csrf".

            Ist aber nochmal ein ganz anderes Problem als das in deiner ursprünglichen Frage.
            [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

            Kommentar


            • #7
              Ja irgendwie redet ihr jetzt von echt komischen Dingen. Das brauchst du wirklich nicht um zu checken ob das Produkt wirklich existiert!

              Einfach eine DB Abfrage ob das Produkt so existiert, wenn ja in den Warenkorb ...

              Kommentar


              • #8
                @ Flor1an

                Dann werde ich eine Datenbankabfrage einbauen, vielen Dank für deine Meinung.


                @ ByStones + agrajag

                Ich meine den Sinn des Tokens verstanden zu haben. Befindet man sich bspw. auf der Seite eines Webshops und füllt parallel dazu ein gefälschtes Formular aus, wird durch den Token verhindert, dass unter der aktuellen Session die Aktion ausgeführt wird. Denn das gefälschte Formular müsste den Token kennen, welcher für die aktuelle Session generiert worden ist. Vielen Dank für den Hinweis. Dann werde ich das zusätzlich einbauen.

                Kommentar


                • #9
                  Wofür? Das macht dir doch nur deutlich mehr Arbeit, bringt dir aber nichts.

                  Jemand der Produkte in seinen Warenkorb hinzufügt und dafür nicht das vorgesehene Formular nutzt ist doch selber Schuld. Wo ist das Problem wenn er die Produkte durch nen anderes Formular einfügt? Die Produkte könnte er auch so einfügen. Sehe keinen Grund warum er das nicht anders machen sollte! Und das Token könnte er ebenfalls fälschen indem er es aus der Seite ausliest, also ich seh überhaupt keinen Mehrwert an der Aktion.

                  Kommentar


                  • #10
                    Einen Sinn sehe ich da auch nur bei deaktivierten Produkten oder bei Produkten, die nur einer bestimmten Gruppe zugängig sein soll (z.b. nur zertifizierten Firmen o.ä.).
                    Hier kann man allerdings anhand der Datenbank und des Benutzers per Query einen Abgleich durchführen.

                    Kommentar


                    • #11
                      Falsch hier "kann" man nicht nur durch eine Abfrage prüfen sondern hier MUSS man prüfen! Alles andere wäre hochgradig fahrlässig! Und sowas kann man auch nicht durch Token überprüfen! Schließlich kann ich mit Firebug z.b. das Formular direkt auf der Webseite manipulieren, daher wäre dann der richtige Token vorhanden und ich kann trotzdem beliebige ProduktIDs eingeben ... es macht meiner meinung nach nur mehr Arbeit und bringt genau gar nix ...

                      Kommentar


                      • #12
                        Zitat von Flor1an Beitrag anzeigen
                        Und sowas kann man auch nicht durch Token überprüfen! Schließlich kann ich mit Firebug z.b. das Formular direkt auf der Webseite manipulieren, daher wäre dann der richtige Token vorhanden und ich kann trotzdem beliebige ProduktIDs eingeben
                        Wie ich sagte: Bei dem Token geht es um ein GANZ ANDERES Problem: CSRF.
                        Das hat erstmal nix mit dem zu tun was die ursprüngliche Frage in diesem Thread war.

                        ... es macht meiner meinung nach nur mehr Arbeit und bringt genau gar nix ...
                        Das stimmt nicht - es ist halt nur nicht die Lösung für das "Id-Problem". Sondern die Lösung für eine gefährlichere Sicherheitslücke. CSRF ist ein oft unterschätztes Problem. Und man kann es eben relativ leicht durch so ein Token lösen.
                        [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

                        Kommentar


                        • #13
                          Ein Token-Verfahren heißt aber oft, dass bereits ein zweiter Browsertab mit dem selben Shop mir Probleme bereiten wird. IMHO recht realitätsfern, denn nen zweiten Tab macht man schnell mal auf, bspw. um Produktdetails zu vergleichen.
                          [COLOR="#F5F5FF"]--[/COLOR]
                          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                          [COLOR="#F5F5FF"]
                          --[/COLOR]

                          Kommentar


                          • #14
                            Zitat von nikosch Beitrag anzeigen
                            Ein Token-Verfahren heißt aber oft, dass bereits ein zweiter Browsertab mit dem selben Shop mir Probleme bereiten wird. IMHO recht realitätsfern, denn nen zweiten Tab macht man schnell mal auf, bspw. um Produktdetails zu vergleichen.
                            Lösung: Jedes Formular bekommt eine ID und jede ID hat ein zugehöriges Token!

                            Dennoch ist das Token an der Stelle des "Warenkorbs" nicht zwingend nötig (auch wenn heutzutage besser immer dabei), sollte jedoch an der "Kasse" auf jede Fall eingefügt werden!

                            Kommentar


                            • #15
                              Gerade an der Kasse hat das nichts verloren. Die Tokenlösung ist ok an den Stellen, wo die Elemente eingefügt werden, an der Kasse sollte man imho nur Produkte anzeigen, die nach Prüfung in der Session gespeichert wurden (und ggf. an der Kasse nochmals gegen die DB geprüft wurden).
                              [COLOR="#F5F5FF"]--[/COLOR]
                              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                              [COLOR="#F5F5FF"]
                              --[/COLOR]

                              Kommentar

                              Lädt...
                              X