Ankündigung

Einklappen
Keine Ankündigung bisher.

Affenformular: $_SERVER['REQUEST_METHOD']

Einklappen

Neue Werbung 2019

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

  • Affenformular: $_SERVER['REQUEST_METHOD']

    Hallo,

    bezüglich http://php-de.github.io/jumpto/affenformular/ Abschnitt "Problematik Enter-Taste":

    Würde eine Überprüfung mit Hilfe von
    $_SERVER['REQUEST_METHOD'] das Problem nicht umgehen?


  • #2
    Mir fällt dazu nur ein, würde man im Form die method="get" verwenden wollen, dann könnte man das wieder nicht von einem normalem Request alleinig an Hand dessen erkennen.

    [MOD: verschoben von PHP-Einsteiger]
    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Ja das stimmt.

      Naja im Endeffekt ist es sowieso sinnvoller wie im Artikel vorgeschlagen ein verstecktes Textfeld zu verwenden und darin aber keinen beliebigen Wert, sondern den CSRF-Token zu transportieren. Denn den benötigt man ja eigentlich in jedem Fall.

      Kommentar


      • #4
        Ja stimmt, da stimme ich dir zu, das wäre wohl sehr sinnvoll, und hat gleich doppelten Nutzen. Ich weiß ehrlich gesagt nicht wie "alt" der Artikel ist..
        Wenn du Zeit und Lust hast kannst du sehr gerne mal drüber rauschen. http://php-de.github.io/jumpto/contribute/
        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Weder die Request-Methode, noch das CRLF-Token repräsentieren ein Form. Eine Schnittmenge an Request-Felder-Schlüssel schon: https://eval.in/private/1f344125442776
          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

          Kommentar


          • #6
            Ehrlich gesagt verstehe ich nicht richtig worauf du hinaus willst?

            Ein vollständiges Form wird durch die Übermittlung von zumindest Schlüsseln für alle seine Felder repräsentiert - okay.

            Aber im Kontext des Threads und des Affenformular-(Artikel)s geht es nicht darum, die Vollständigkeit eines Formulars festzustellen. Auch wenn es unvollständig übermittelt wird, soll erkannt werden, dass ein Formular übermittelt wurde. Und wenn man für jedes Form ein (gültiges) CSRF-Token verlangt, dann kann man das doch wunderbar als Erkennungskriterium verwenden?

            Kommentar


            • #7
              Kannst du nicht, weil CSRF ( wie komm ich denn auf CRLF oO ) nicht auf Formulare begrenzt sind. Ein existierendes Token und ein Submit Button sagt nicht wirklich etwas über die Vollständigkeit eines Formulars aus. Denkt man sich die "UI" weg und würde man das Script ohne Form ansteuern und nur das Token und das Button-Field angeben, wär das "Form" für dich identifiziert.
              [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

              Kommentar


              • #8
                Ja - und genau das ist korrektes Verhalten. Falls es nicht gewünscht ist, dann muss man eben entsprechende weitere Abfragen machen, aber als grundsätzliches Verhalten halte ich das für legitim.

                Kommentar


                • #9
                  Eher nicht, legitim schon gar nicht, wenn das was ich da Prüfe nicht einzigartig ist und das sind Button-Werte in der Regel nicht. Oder sind sie es bei dir ? So das du in 20 Actions definitiv sagen kannst, das Button "XY" von Form "ABC" kommt ?

                  Ich prüfe auf Existenz der notwendigen Felder die ich verarbeiten möchte, validiere sie und mach was damit.
                  [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                  Kommentar


                  • #10
                    Irgendwie glaube ich, wir meinen jeder was anderes.

                    Mir geht's nur um das hier:
                    PHP-Code:
                    <html>
                    ...
                    <body>
                    <?php if (isset[$_POST['token'])) {
                       ... 
                    // Formularverarbeitung
                    } else {
                    ?>
                        <form action="" method="POST">
                           <input type="hidden" name="token" value"...">
                            ...
                        </form>
                    <?php ?>
                    </body>
                    </html>
                    Ich möchte einfach ein Entscheidungskritierium, wann ich PHP-Code zur Formverarbeitung ausführe und wann ich lediglich das HTML-Formular anzeige. Und so etwas wie ein if (isset[$_POST['token'])) reicht da meiner Meinung nach.

                    Kommentar


                    • #11
                      meinen wir nicht..

                      PHP-Code:
                      <html>
                      ...
                      <body>
                      <?php 

                      $formIn 
                      = function(array $request) {
                          
                      $fields = [
                              
                      // ... all required fields here
                              
                      'token',
                          ];
                          
                          return empty(
                      array_diff_key(array_flip($fields), $request));
                      };

                      if ( 
                      $formIn($_POST) ) {
                         ... 
                      // Formularverarbeitung
                      } else {
                      ?>
                          <form action="" method="POST">
                             <input type="hidden" name="token" value"...">
                              ...
                          </form>
                      <?php ?>
                      </body>
                      </html>
                      [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                      Kommentar


                      • #12
                        Und was, wenn das Formular nur aus ein paar Checkboxen besteht, die keinen Schlüssel im $_POST-Array erzeugen, wenn sie nicht angeklickt sind?

                        Sicher, man kann ja mit einem gleichnamigen hidden-Feld das Problem umgehen, aber irgendwann wird es auch etwas zu kompliziert um Anfänger das Affenformular näher zu bringen, meinst du nicht?

                        Kommentar

                        Lädt...
                        X