$_POST Inhalte prüfen

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

  • $_POST Inhalte prüfen

    Hallo zusammen,

    habe schon mehrmals danach gesucht, aber nichts richtiges gefunden. Es geht mir darum, den Inahlt von $_POST zu prüfen. Also ob da versteckte Befehle, Hacks usw. drin sind. Will also einfach nur die Sicherheit meiner Scripte und des Servers verbessern. Kennt hier vielleicht wer eine Seite wo ich eine genaue Beschreibung finde worauf ich dabei achten muss?

  • #2
    z.B. htmlentities benutzen
    Für alle die Fehler suchen, gibts gratis tolle Debuggingmöglichkeiten:
    var_dump(), print_r(), debug_backtrace und echo.
    Außerdem gibt es für unsere Neueinsteiger ein hervorragendes PHP Tutorial zu PHP 4 und PHP 5 (OOP)
    Es heißt $array['index'] und nicht $array[index]! Und nein, das ist nicht egal!
    Dieses Thema lesen, um Ärger im Forum und verzögerte Hilfen zu vermeiden.

    Kommentar


    • #3
      Selbst wenn versteckte Befehle drin stehen, musst ja nicht alles verarbeiten.

      Deine Anwendung benutzt $_POST["user"] und $_POST["pass"]
      warum sollte dich ein (wie auch immer) eingeschleustes $_POST["format C:"] interessieren?

      Kannst z.B mit

      print_r($_POST) auch gerne mal nachsehen ob da was nicht gewolltes drinsteht...
      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        Ich prüfe meisten so:
        3 Beispiele mit errorhandling...
        [pseudo]

        PHP-Code:
        $checked_plz = isset($_POST['plz']) ? $_POST['plz']+0;
                     if (
        $checked_plz == || strlen($_POST['plz']) != 5){
                             
        $error[] = 1;
                    }

                         
        $mobil 0;
                         if (
        $_POST['mobil'] == 1){
                             
        $mobil 1;
                    }

                         if(!
        preg_match('/^[a-zA-ZäöüÄÖÜ\/ -]{3,30}$/',$_POST['name'])){
                                 
        $error[] = 4;
                }

        if(
        count($error) > 0){

                    
        $code implode('-',$error);
                                 if(
        in_array(1$error))
                                     echo 
        "*plz nicht korrekt!<br>";
        // evtl. weitere verwendung der fehlercodes...                         
        header("location: blabla.php?code=$code");
        exit;
                                 
                    }
        // keine fehler, weiter gehts... 

        Kommentar


        • #5
          in $_POST / $_GET steht das drin, was ich im script erwarte, also prüfe ich auch darauf ... strings werden entwertet, je nach bedarf htmlentities/mysql_escape_string/strip_tags etc. pp. ... zahlenwerte explizit auf float/int gesetzt ... sonderfälle mit regexp geprüft.

          was nicht ins raster ^^ passt ... fliegt in die ablage "p".

          bei $_FILES sollte man ggfs. shell-zugriff haben, um generell unerwünschte daten vom server fernzuhalten.
          Kissolino.com

          Kommentar


          • #6
            Bei einem meiner Projekte liegen alle Variablennamen mit ihrer Typbezeichnung in ner DB.
            Dazu gibts ne Funktion die alle POST, GET, ... Variablen mit dieser Tabelle abgleicht, also überprüft ob diese Variable überhaupt existieren darf und wenn ja ob der Typ stimmt. Wird ein schwarzes Schaaf gefunden erfolgt ein eintrag in meiner error-history.
            Ist natürlich etwas aufwendig dafür aber sehr sicher.

            Kommentar


            • #7
              Original geschrieben von ExInfernis
              Bei einem meiner Projekte liegen alle Variablennamen mit ihrer Typbezeichnung in ner DB.
              Dazu gibts ne Funktion die alle POST, GET, ... Variablen mit dieser Tabelle abgleicht, also überprüft ob diese Variable überhaupt existieren darf und wenn ja ob der Typ stimmt. Wird ein schwarzes Schaaf gefunden erfolgt ein eintrag in meiner error-history.
              Ist natürlich etwas aufwendig dafür aber sehr sicher.
              wiedermal ein perfekter Overkill für die Datenbank, bei einem größerem (großen) Projekt

              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
              Wie man Fragen richtig stellt

              Kommentar


              • #8
                das wollte ich auch gerade sagen
                man sollte immer versuchen möglichst wenige queries zu benutzen, das was du machst kannst du sicherlich auch mit textdateien oder ganz anders lösen.

                Kommentar


                • #9
                  Original geschrieben von kaguya
                  das was du machst kannst du sicherlich auch mit textdateien
                  das ist genauso der perfekte Overkill für das Filesystem

                  Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                  bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                  Wie man Fragen richtig stellt

                  Kommentar


                  • #10
                    Die Db ist nur klein und steht auf nem eigenen Server.
                    Hatte einfach Lust es umzusetzen.

                    Kommentar


                    • #11
                      Original geschrieben von ExInfernis
                      Die Db ist nur klein und steht auf nem eigenen Server.
                      Hatte einfach Lust es umzusetzen.
                      kannst du ja auch tun, aber für 120%-Projekte/Server sind solche Spielereien nichts

                      Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                      bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                      Wie man Fragen richtig stellt

                      Kommentar


                      • #12
                        naja dann eben ganz ohne speichern
                        ich meinte nur das es im filesystem besser ist als in ner db, mysql hält bekanntlich nicht viel aus

                        Kommentar


                        • #13
                          Original geschrieben von kaguya
                          mysql hält bekanntlich nicht viel aus
                          Woher hast du das denn?

                          Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                          bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                          Wie man Fragen richtig stellt

                          Kommentar


                          • #14
                            von leuten die sich auskennen

                            ich kenne da jemanden der macht sowas seit 14 jahren, unter anderem hat er seit 1999 eine shop software und der meint das seine konkurrenz mit MYSQL shops sehr viel schneller an ihre grenzen kommt als er mit seinen gut durchdachten csv datenbanken, alleine was Artikelanzahl angeht. Da ein Shop sehr klickintensiv ist und viele shops in der db etliche verknüpfungen mit tabellen für variationen oder andere sprachen haben wir das ganze ab 10.000 artikeln sehr viel langsamer als bei text dateien.

                            und im vergleich zu zb xtcommerce ist sein shop ne ecke schneller.

                            bei foren etc kann man auf mysql natürlich nicht verzichten aber ich finde man sollte sich db anfragen sparen wo man kann.

                            Kommentar


                            • #15
                              und im vergleich zu zb xtcommerce ist sein shop ne ecke schneller.
                              was wohl von der programmierung abhängt, ich denke unter gleichen voraussetzungen ist ne datenbank um längen schneller wie textdateien. dazu muss die anwendung und die datenbank auch auf performance designed werden, was in vielen anwendungen nicht der fall ist.

                              aber zur eigentlichen frage:

                              prüfe alle POST-Variablen so genau wie möglich, wie scho westberlin geschrieben hat:

                              Was wird erwartet? nur zahlen, dann akzeptiere nur zahlen.
                              nur text?, dann akzeptiere nur text.

                              Filtere zusätzliche Zeichen aus, die keinen sinn machen (Zeilenumbrüche etc....)

                              und htmlentities() verwenden.

                              Selbst wenn versteckte Befehle drin stehen, musst ja nicht alles verarbeiten.

                              Deine Anwendung benutzt $_POST["user"] und $_POST["pass"]
                              warum sollte dich ein (wie auch immer) eingeschleustes $_POST["format C:"] interessieren?
                              verarbeitet wird das doch dann aber meistens in ner datenbankanfrage, und dafür sollte es schon so geprüft werden, dass keine SQL-Befehle eingeschleust werden können.

                              Kommentar

                              Lädt...
                              X