Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular ausgeben

Einklappen

Neue Werbung 2019

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

  • Formular ausgeben

    Hallo php-mitglieder

    ich bin gerade dabei PHP zu lernen und bin jetzt dort angekommen, wo man Formulardaten ausgibt.

    Der folgende Code sieht so aus:

    Code:
    if (isset($_POST['submit'])) {
      if (isset($_POST['anzahl'])) && !is_array($_POST['anzahl']) && $_POST['anzahl'] != '') {
        echo 'Anzahl Karten: ' . htmlspecialchars($_POST['anzahl']) . '<br />';
      } else {
        echo 'keine Karten anzahl ausgewählt.';
      }
    }
    was ich jetzt nicht verstehe ist das:

    Code:
    !is_array($_POST['anzahl'])
    es soll verhindern dass ein Angreifer PHP durcheinander bringt oder so. Aber ich versteh das nicht so richtig. Kann mir einer genauer erklären inwiefern die Bedingung vor einen möglichen Angriff schütz?

    anzahl ist im übrigen type="text"

    So etwa hat der das erklärt:
    wäre es für einen angriefer möglicherweise machbar dass $_POST['anzahl'] ein Array ist. Bei Mehrfachauswahlliste, mit den eckigen Klammern, damit gaukelt man PHP vor dass ein Array kommt. Aber bei der Mehrfachauswahlliste ist es kein gaukeln. es kommen wirklich mehrere Werte. Aber sonst kann man eben so PHP aus dem Tripp bringen.

    => es darf kein Array sein.

  • #2
    dass ein Angreifer PHP durcheinander bringt
    Aha...kommt drauf an, was Du später mit den Werten vorhast. Wie soll er das durcheinander bringen? Gängie Sicherheitsmakel sind z.B. XSS oder SQL Injection (Datenbank) und wenn Du Formulardaten prüfst, prüfst ja auch direkt (üblicherweise) was für ein Inhalt, z.B. ein PLZ Feld sollte nicht mehr als 5 Zeichen haben, integer Werte usw.! Mir leuchtet das mit !is_array() nicht direkt ein, aber ich lerne auch gerne noch was, wenn jemand ne andere Meinung hat!

    Wolf29
    while (!asleep()) sheep++;

    Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

    Kommentar


    • #3
      wow da bekommt man das gefühl ja du weißt was ich gerade für ein code schreibe. habe ein feld wo man plz eintragen soll und mit html das limit der zeichen auf 5 gesetzt. sollte man da denn trotzdem prüfen?

      das tut das ich benutze ist übrigens ein Videotraining von video2brain, mit denen ich bisher eigl nur gute erfahrung gemacht habe. habe damit auch schon paar andere sachen gelernt. also gehe ich einfach mal von aus dass !is_array schon irgendein sinn hat. aber ich habe leider keine ahnung..

      Kommentar


      • #4
        Na ja, das ist so üblich behaupte ich mal. Hier nochmal ein Link, zu den 5 häufigsten Sicherheitslücken:

        http://phpug-karlsruhe.de/wp-content...itsluecken.pdf

        Das sollte Dir helfen! !is_arrary macht für mich in diesem Zusammenhang nicht soviel Sinn, aber das ist auch nur ein kleiner codeausschnitt von Dir!

        Wolf29
        while (!asleep()) sheep++;

        Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

        Kommentar


        • #5
          Wenn du auf 'http://deinedomain.de/formular.php' ein Formular mit action = "" oder action = "formular.php" stellst, dann wird ein potentieller Angreifer sich das gleiche Formular auf seinen eigenen Webspace legen und mit action = "http://deinedomain.de/formular.php" zu deinem Script senden. Ob du da eine Längenbegrenzung in deinem HTML-Code hast, das interessiert den Angreifer dann wenig. Es können dennoch ein kB Daten dort ankommen.
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar


          • #6
            Im Allgemeneinen: Immer client- und serverseitig prüfen. Die bösen Jungs können meistens programmieren und die Aufrufe entweder programmatisch oder z.B. mit einem modifizierten Browser, der sich um sowas nicht kümmert machen.

            Kommentar


            • #7
              Imho reicht serverseitig völlig aus, da Clientseitig (z.B. JavaScript) abgestellt werden kann. Mit PHP kannst üblicherweise "alles" prüfen! Wichtig ist, dass man gewisse Regeln beachtet und mögliche Schwachstellen kennt. Aber du hast recht: die Leute können meist programmieren und kennen die Schwächen

              Wolf29
              while (!asleep()) sheep++;

              Unterschätze nie jemanden der einen Schritt zurück geht! Er könnte Anlauf nehmen.

              Kommentar


              • #8
                Zitat von Xazen Beitrag anzeigen
                habe ein feld wo man plz eintragen soll und mit html das limit der zeichen auf 5 gesetzt. sollte man da denn trotzdem prüfen?
                Natürlich.

                Der größte Denkfehler, den Neulinge in dieser Hinsicht immer machen, ist der, dass sie annehmen, ein Request müsse von einem „Browser“ kommen.
                [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                Kommentar


                • #9
                  Und bei den 5 Stellen im "PLZ-Bereich" würde auch ein limitierter Wert ( int(5) z.B.) in der Datenbank hilfreich sein....

                  Kommentar


                  • #10
                    Nein, INT ist für Postleitzahlen absolut nicht geeignet.

                    Ihrem Namen zum trotz sind das nämlich keine „Zahlen“ - es gibt bspw. mit 0 beginnende PLZ, und diese Info würde dir verloren gehen, wenn du den Wert als INT speicherst.
                    Außerdem sollte man gleich von Anfang an bedenken, dass PLZ == 5 Ziffern nur für Deutschland gilt - andere Länder haben andere postal codes, ggf. alphanummerisch, mit Sonderzeichen, anderer Länge ... da sollte man sich früh genug überlegen, ob die zu speichernden Adressen immer auf deutsche beschränkt bleiben werden, oder ob man das lieber gleich für internationale tauglich aufbaut.
                    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

                    Kommentar


                    • #11
                      Da haste allerdings recht. Liegt wahrscheinlich daran, dass ich's bisher ausschliesslich regional gebraucht habe. Dann frag ich doch gleich mal, wie eine sinnvolle internationale Formatierung aussehen könnte?

                      Kommentar


                      • #12
                        Bei so kleinen Dingen verkopft man sich öfters mal. Mach dir keine Gedanken über eine mögliche internationale Formatierung, sondern erlaube bspw. 10 Zeichen und filtere den Nutzer-Input. PHP bietet ein paar nette Funktionen: PHP: Filter - Manual ! Damit sollte auch die Sicherheit gewährleistet sein.

                        Kommentar

                        Lädt...
                        X