Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Input filtern

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Input filtern

    Hallo, ich suche nach einer Möglichkeit, wie ich alle Usereingaben filtern kann. Ich bin zum Teil auf Funktionen gestoßen, doch ich glaube die sind bisschen alt. Könnt ihr mal nen Blick drüber werfen:

    PHP-Code:

    function reinige($eingabe) {
      
    $eingabe trim($eingabe);
      
    $eingabe stripslashes($eingabe);
      return 
    $eingabe;
    }

    //Verwendung

    $email reinige($_POST['email']); 
    Nun meine Frage: Was haltet ihr davon? Bin noch ziemlich neu und Thema Sicherheit ist leider noch sehr neblig für mich.


  • #2
    filter_input() http://php.net/manual/de/function.filter-input.php (Beispiele unten anschauen)

    Geht halt auch dann immer darum was mit den Werten dann passiert, da wird dann auch der Ausgabekontext interessant, also in Bezug auf SQL-Injections, XSS, etc.. Siehe auch hier: http://php-de.github.io/#security

    trim() hat weniger/nichts mit Sicherheit zu tun.

    LG
    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
      Ich würde diesen Filter als weitgehend Nutzlos betrachen, da er aller Wahrscheinlichkeit mehr Probleme machen wird als für Sicherheit sorgen. Sicherheit kannst du nur erreichen, wenn du dir klar machst welche Werte vom User kommen können, und in welchem Kontext du diese wie behandeln musst. http://php-de.github.io/jumpto/kontextwechsel/

      Dabei gilt:
      HTML -> htmlentities
      SQL -> prepared Statements
      CSV -> stripslashes
      ...
      mysql ist veraltet Mails senden: Ohne Probleme und ohne mail()
      PHP-Code:
      echo 'PS: <b>Meine Antwort ist keine Lösung, sondern nur eine Hilfe zur Lösung.</b>'

      Kommentar


      • #4
        Ok, wie man etwas ausgibt und escaped weiss ich. Es geht darum Daten vom Formular entgegenzunehmen, zu filtern (hier sind wir) dann zu validieren und in die db einzutragen.
        @hausl: In deinem verlinkten Artikel (php wissenssammlung) sehe ich auch nichts explizit dazu.

        Kommentar


        • #5
          Wenn du deine Usereingabe filtern willst, um SQL-Injections zu vermeiden, dann solltest du dich am besten in das Thema "prepared statements" lesen
          andere Möglichkeit bietet der real_escape_string
          PHP-Code:
          $city $mysqli->real_escape_string($city); 
          Wenn du innerhalb deiner Webseite Formulareeingaben überprüfen willst, kannst du das auch direkt durch HTML5 durchführen lassen.

          Code:
          <!DOCTYPE html>
          <html>
          <body>
          
          <form action="action.php">
            3 Buchstaben sind erlaubt: <input type="text" name="dreiBuchstaben" pattern="[A-Za-z]{3}" title="3 Buchstaben">
            <input type="submit">
          </form>
          </body>
          </html>
          Das kannst du dann nach deinem Belieben anpassen.

          Kommentar


          • #6
            Wenn du innerhalb deiner Webseite Formulareeingaben überprüfen willst, kannst du das auch direkt durch HTML5 durchführen lassen.
            Sicher nicht. Das läuft nur clientseitig ab.

            Kommentar


            • #7
              Zitat von hartCoder Beitrag anzeigen
              Ok, wie man etwas ausgibt und escaped weiss ich. Es geht darum Daten vom Formular entgegenzunehmen, zu filtern (hier sind wir) dann zu validieren und in die db einzutragen..
              Mit deiner Funktion filterst du aber nichts, du manipulierst nur den Wert.
              Du musst klarer wissen was du machen willst.

              Validierung (z.B. Whitelist) - prüft ob der Wert erlaubt/valide ist
              Sicherheitsmaßnahmen (Escaping) - sorgt dafür, dass schädliche Eingaben 'entschärft' werden

              Die Sicherheitsmaßnahmen setzt du genau dann ein, wenn sie nötig sind. siehe ChrisvA
              Validierung musst du selbst umsetzen, wie du es für richtig hältst. Dazu gehört zum Beispiel ob ein Wert ein Integer ist wenn du solchen erwartest etc. Mit den von dir eingesetzten Funktionen, hast du gar nichts zu tun.
              Validierung verändert die Werte nicht, sondern gibt true oder false an, ob sie valide sind oder nicht.
              Relax, you're doing fine.
              RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

              Kommentar


              • #8
                Sicher nicht. Das läuft nur clientseitig ab.
                Sorry hast recht.
                Aber mit dem pattern Attribut bist du zumindest etwas sicherer unterwegs als ohne. Auf prepared statements solltest du dabei aber natürlich nicht verzichten.

                Kommentar

                Lädt...
                X