Formular:sicherstellen das mit Ajax gesendetes Formular vom eigenen Formular stammt?

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

  • Formular:sicherstellen das mit Ajax gesendetes Formular vom eigenen Formular stammt?

    Hallo,
    also ich habe ein Formular welches mit Hilfe von JS gebrüft wird, und nur wenn alles meine Vorgaben entspricht wird es an den Server geschickt und PHP ausgewertet.
    Gibt es eine Möglichkeit mit der ich verhindern kann das sich irgendwer ein eigenes Formular bastelt und somit die JS-Prüfung umgeht?

  • #2
    Hi!

    Was machst Du eigentlich mit den Leuten, die JavaScript deaktiviert haben? Die umgehen damit ja auch dein Prüfung!

    mfg streuner

    Zu deiner Frage: http://forum.de.selfhtml.org/archiv/2004/6/t82636/
    Zuletzt geändert von streuner; 02.12.2009, 16:25.
    Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
    der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

    "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

    Kommentar


    • #3
      Danke, für deine Antwort.
      Leider habe ich nicht ganz verstanden wie genau dies mir helfen könnte?
      Eine Session zu starten bringt nichts, dann öffnet derjenige einfach ein zweiten Tab.


      JS setze ich zur Nutzung vorraus, anssonsten bekommt der User schon beim aufrufen des Formulars eine Meldung das JS aktiviert werden muss.
      Wenn JS nicht aktiviert ist, ist das Formular nicht absendbar.

      Kommentar


      • #4
        Kannst es dem User zumindestens erschweren, schau Dir das Beispiel hier an (Stichwort [COLOR=#000000][COLOR=#0000bb]microtime[/COLOR]):

        [/COLOR]http://www.selfphp.de/kochbuch/kochbuch.php?code=21


        mfg streuner
        Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
        der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

        "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

        Kommentar


        • #5
          Danke dir für deine Mühe,
          leider bringt es nichts.
          Wahrscheinlich gibt es keine Möglichkeit dies zu verhindern.
          Ich will keine doppelte Absendung verhindern.

          Ich möchte verhindern das jmd. die JS-Prüfung umgeht, also einfach das Formular nachbastelt, mein Formular aufruft sich die id's,name', und values der hiddenfelder kopiert und dann an php via nachgebauter JS sendet.

          Ich denke da muss ich via PHP die getätigten eingaben trotzdem nochmal auf gewisse zeichen prüfen.

          Aber dir vielen Dank, irgendwann wirds mir sicher helfen )).

          Kommentar


          • #6
            Zitat von Pums Beitrag anzeigen
            Ich denke da muss ich via PHP die getätigten eingaben trotzdem nochmal auf gewisse zeichen prüfen.
            Sollte man imho immer machen, da man clientseitig eh sehr viel manipulieren kann.

            Peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              Hallo,

              nochmal zum Verständnis: Geht es darum, dass die hidden-Felder nicht manipuliert werden dürfen oder um die Daten, die der Benutzer selbst eingibt?

              Wenn es nur um die hidden-Felder geht und die nicht mit JS gesetzt werden sondern vom Server kommen: Benutze eine Session und speichere die Infos dort drin, statt in hidden-Feldern.

              Wenn es um die hidden-Felder geht und die mit JS gesetzt werden: Was willst du eigentlich verhindern? Kann man das nicht auch PHP-seitig (nochmal) prüfen? Ist es das was du mit "gewisse Zeichen" meinst?

              Gruß,

              Amica
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                Es ging halt einfach nur um die übliche Prüfung der eingegebenen Daten auf nicht erlaubte Zeichen(Name darf keine Zahl erhalten usw.), Sonderzeichen die gefählich sein könnten(z.B.<>).
                Ich habs mit JS gemacht da ich einfach allg. eine den Server vorab vor solche Daten schützen möchte und um Benutzerfreundlicher zu werden.

                Natürlich kann es dann passieren das jmd. die Daten direkt an den Server schickt, man kann ja das JS sowie die Formulardaten(id's,hiddenfelder etc.) sehr leicht auslesen.

                Nun dachte ich mir vllt. gibts ja ne Möglichkeit am Server zu prüfen ob die Daten von meinem Formular über mein Http(post)Request von JS bzw. Ajax gesendet wurden.
                Das würde einfach eine erneute Kontrolle der Daten am Server ersparen.

                Da das logischerweise nicht geht, überprüf ich das gnaze also trotzdem nochmal mit am Server.

                Ich danke euch .

                Kommentar


                • #9
                  Übrigens sollte man sich langsam mal von dem Schwarz-Weiß Denken ala "es gibt nur JavaScript an und JavaScript aus" verabschieden. In Zeiten, in denen Browser ein unerwünschtes von einem erwünschten PopUp unterscheiden können, kann ein Browser auch nervige Alters unterbinden. Und dann besteht auch noch die Möglichkeit, dass ich JavaScript erst NACH dem aufrufen der Seite aber VOR dem absenden deaktiviere (vor allem wenn ich z.B. merke, dass da ein übereifriger Entwickler mal wieder der Meinung wäre, ich dürfte keine Plus-Zeichen in meiner eMail-Adresse haben, da diese damit ungültig wäre).
                  Zuletzt geändert von unset; 04.12.2009, 17:31.
                  [FONT="Helvetica"]twitter.com/unset[/FONT]

                  Shitstorm Podcast – Wöchentliches Auskotzen

                  Kommentar


                  • #10
                    Zitat von Pums Beitrag anzeigen
                    Ich habs mit JS gemacht da ich einfach allg. eine den Server vorab vor solche Daten schützen möchte
                    Den Server brauchst du vor solchen Sachen nicht „schützen”.

                    Nun dachte ich mir vllt. gibts ja ne Möglichkeit am Server zu prüfen ob die Daten von meinem Formular über mein Http(post)Request von JS bzw. Ajax gesendet wurden.
                    Nein, die gibt es nicht.
                    Das würde einfach eine erneute Kontrolle der Daten am Server ersparen.
                    Diese Kontrolle ist generell unverzichtbar.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Zitat von unset Beitrag anzeigen
                      Übrigens sollte man sich langsam mal von dem Schwarz-Weiß Denken ala "es gibt nur JavaScript an und JavaScript aus" verabschieden. In Zeiten, in denen Browser ein unerwünschtes von einem erwünschten PopUp unterscheiden können, kann ein Browser auch nervige Alters unterbinden. Und dann besteht auch noch die Möglichkeit, dass ich JavaScript erst NACH dem aufrufen der Seite aber VOR dem absenden deaktiviere (vor allem wenn ich z.B. merke, dass da ein übereifriger Entwickler mal wieder der Meinung wäre, ich dürfte keine Plus-Zeichen in meiner eMail-Adresse haben, da diese damit ungültig wäre).

                      Danke, für deine Antwort.

                      Zu meiner Verteidigung möchte ich auch darauf Hinweisen das ich ein Neuling bin, beschäftige miche erst seit 1/2 Jahr mit der Webprogrammierung, muss also noch ne Menge lernen(danke das es solche Foren gibt ).

                      "auch nervige Alters unterbinden"->Was meinst du mit Alters?

                      "dass ich JavaScript erst NACH dem aufrufen der Seite aber VOR dem absenden deaktiviere"-> aber dann wird ja nicht gesendet, das das onclick-Event nicht ausgeführt wird.Ist übrigends kein submit sondern ein button.




                      @wahsaga
                      hab ich mir fast gedacht(zu allen 3 Punkten).Hätt ja sein können das es ne Möglichkeit gibt.Danke

                      Kommentar


                      • #12
                        Zitat von Pums Beitrag anzeigen
                        "auch nervige Alters unterbinden"->Was meinst du mit Alters?
                        Tippfehler, Alert dürfte gemeint gewesen sein - window.alert()

                        "dass ich JavaScript erst NACH dem aufrufen der Seite aber VOR dem absenden deaktiviere"-> aber dann wird ja nicht gesendet, das das onclick-Event nicht ausgeführt wird.Ist übrigends kein submit sondern ein button.
                        Total egal. Bereits wenn sich der Fokus in einem Text-Input befindet, lässt sich ein Formular mittels Entertaste abschicken.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          1.ahhh, alles klar, alerts gibts aber net.
                          2.ich glaub ich poste mal den Code, bei mir lässt sich das Formular nicht über ein Enter abschicken da es ja via Ajax an den Server gesendet wird .

                          Also hier Das Formular was ich übergebe:
                          PHP-Code:
                          <?php
                          $Cont
                          ='
                          <noscript><b>Sie müssen Javascript aktivieren!!!</b></noscript>
                          <script type="text/javascript" src="JS/register.js"></script>
                          <script type="text/javascript" src="JS/Form_Error.js" ></script>
                          <span class="sys_Error" id="Form_Error">&nbsp;</span>

                          <form action="not_form.php" method="post" class="register" name="register">
                          <table class="Form">
                          <tr>
                          <td>Vorname:</td>
                          <td>
                          <input type="text" name="Data[]" id="0"/><span class="sys_hidden" id="reg_Firstname">Vorname darf nur A-Z und ´` enthalten</span>
                          </td>
                          </tr>
                          <tr>
                          <td>
                          Nachname:
                          </td>
                          <td>
                          <input type="text" name="Data[]" id="1"/><span class="sys_hidden" id="reg_Lastname">Nachname darf nur A-Z und ´` enthalten</span>
                          </td>
                          </tr>
                          <td>
                          Strasse:
                          </td>
                          <td>
                          <input type="text" name="Data[]" id="2"/><span class="sys_hidden" id="reg_Street">Straße darf keine Sonderzeichen enthalten</span>
                          </td>
                          </tr>
                          <tr>
                          <td>
                          PLZ
                          </td>
                          <td>
                          <input type="text" name="Data[]" id="3"/><span class="sys_hidden" id="reg_PLZ">PLZ müssen 5 Zahlen sein</span>
                          </td>
                          </tr>
                          <tr>
                          <td>
                          Stadt
                          </td>
                          <td>
                          <input type="text" name="Data[]" id="4"/><span class="sys_hidden" id="reg_City">Stadt darf nur Buchstaben enthalten</span>
                          </td>
                          </tr>
                          <tr>
                          <td>
                          Email:
                          </td>
                          <td>
                          <input type="text" name="Data[]" id="5"/><span class="sys_hidden" id="reg_Email">Email ist falsch</span>
                          </td>
                          </tr>
                          <tr>
                          <td>
                          Benutzername:
                          </td>
                          <td>
                          <input type="text" name="Data[]" id="6"/><span class="sys_hidden" id="reg_Username">Muss mind. 5 Zeichen haben, darf keine Sonderzeichen enthalten!</span>
                          </td>
                          </tr>
                          <tr>
                          <td>
                          Passwort
                          </td>
                          <td>
                          <input type="password" name="Data[]" id="7"/><span class="sys_hidden" id="reg_Password"></span>
                          </td>
                          </tr>
                          <tr>
                          <td>
                          Passwort wiederholen
                          </td>
                          <td>
                          <input type="password" name="Data[]" id="8"/>
                          </td>
                          </table>
                          <input type="button" value="los" onclick="return send_form()"/>

                          </form>

                          '
                          ;
                          ?>
                          und hier die send_form Funktion:

                          Code:
                          function send_form()
                          {
                              var check=check_form();
                              Form_Error(Error);
                              if(check!=false)
                              {
                                  var reg_send="Fname="+document.getElementById(0).value+"&Lname="+document.getElementById(1).value;
                                  reg_send+="&Street="+document.getElementById(2).value+"&PLZ="+document.getElementById(3).value;
                                  reg_send+="&City="+document.getElementById(4).value+"&Email="+document.getElementById(5).value;
                                  reg_send+="&Uname="+document.getElementById(6).value+"&PW1="+document.getElementById(7).value;
                                  
                                  ro.open("post","Templates/register_sys.php");
                                  ro.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
                                  ro.onreadystatechange=statehandler;
                                  ro.send(reg_send);
                              }
                              
                          }
                          check_form und Form_Error sind glaube ich unwichtig(sind nur nen paar repexp und Fehlermeldungen.

                          Ich verstehe nicht wie man das Formular ohne JS absenden könnte, ausser nen fakeformular an register_sys.php zu senden.

                          Kommentar


                          • #14
                            Zitat von Pums Beitrag anzeigen
                            Ich verstehe nicht wie man das Formular ohne JS absenden könnte, ausser nen fakeformular an register_sys.php zu senden.
                            Dazu würde es wohl schon reichen, einfach die action des Formulars auf register_sys.php zu ändern (bspw. mit Firebug).


                            Gewöhne dir einfach ab, bei der serverseitigen Verarbeitung an Dinge wie „Webseite”, „Formular” oder „Browser” zu denken. Du weisst nicht, ob überhaupt auch nur eines dieser Dinge im Spiel war.
                            Alles, was du weisst, ist, dass ein Request deinen Server erreicht hat, und jetzt vom Server verarbeitet werden will - und das unter Beachtung der notwendigen Sicherheitsmaßnahmen. Sonst weisst du nichts - was aber auch nichts macht, denn alles andere ist komplett uninteressant.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Ok, danke.
                              Also sollte ich jeden Eingang am Server so behandeln als ob er frisch aus der Druckerpresse kommt(also total ungeprüft, von überall und jeden kommen könnte).

                              JS könnte ich einfach nur nutzen um das ganze besser aussehen bzw. wirken zu lassen.

                              Hab ich das richtig verstanden?

                              Kommentar

                              Lädt...
                              X