Ankündigung

Einklappen
Keine Ankündigung bisher.

PDO Prepare sicher?

Einklappen

Neue Werbung 2019

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

  • PDO Prepare sicher?

    Hallo,

    ich füge mit PDO-Prepare Daten in eine DB durch "INSERT INTO tabellenname ... ", wobei tabellenname durch den User mittels $_POST['tabellenname'] kommt.

    Ist meine Ausführung durch die Methode prepare() abgesichert oder muss ich irgendwie den $_POST mit real_ascape bearbeiten?


  • #2
    Weder noch.

    http://www.php.de/php-fortgeschritte...llennamen.html
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Zitat von jack88 Beitrag anzeigen
      Feld- und Tabellennamen sind keine (potenziell gefährliche) Benutzereingaben, wieso sollte es erforderlich sein diese zu prüfen oder zu filtern?

      vg
      jack
      Zitat von nikosch Beitrag anzeigen
      Wenn Sie dynamisch sind, sind sie natürlich gefährliche Eingaben.

      Hallo,

      ich bekomme aus der Diskussion keine klare Antwort.

      Was meinst du mit 'weder noch'?

      Kommentar


      • #4
        Du kannst doch sicher aus den Namen aller erlaubten Tabellennamen eine White-List erstellen, oder?
        PHP-Code:
        if (in_array($gewuenschteTabelle,$erlaubteTabellen)) {
        //Mach weiter...

        Es ist schon alles gesagt. Nur noch nicht von allen.

        Kommentar


        • #5
          Zitat von Fuerst Rainer Beitrag anzeigen
          Hallo,

          ich bekomme aus der Diskussion keine klare Antwort.
          die diskusion besteht nicht nur aus den zwei von dir zitierten postings

          Zitat von jack88 Beitrag anzeigen
          Feld- und Tabellennamen als Benutzereingabe ist eigentlich ein NO-GO und wenn es unbedingt sein muss, dann sollte man zumindest eine UserInputToDbFieldMap dazwischen schalten. Alles andere ist Kamikaze
          Zitat von dingsda Beitrag anzeigen
          ich würde hier auch eher wie jack88 sagt eher über UserInputToDbFieldMap oder ne whitelist gehen.

          PHP-Code:
          $allowed = array (
              
          'name' => 'Name',
              
          'vorname' => 'FirstName'
          );
          $input 'irgendwas';

          if (!isset(
          $allowed[$input]){
              
          // nachrich an nutzer oder sonstwas
          }else{
              
          $query "SELECT `" $allowed[$input] . "` FROM teams WHERE id = :id";  
              
          var_dump$pdo->queryAll($query, array('id' => 3)));

          Was meinst du mit 'weder noch'?
          das heißt, dass weder prepared statements noch mysqli->real_escape_string() / pdo->quote() dich schützen, wenn du tabellen- oder feldname aus benutzereingaben übernimmst.
          diese funktionen sind dafür da um datenbankinhalte abzusichern
          liebe Grüße
          Fräulein Dingsda

          Kommentar


          • #6
            Zitat von drsoong Beitrag anzeigen
            Du kannst doch sicher aus den Namen aller erlaubten Tabellennamen eine White-List erstellen, oder?
            PHP-Code:
            if (in_array($gewuenschteTabelle,$erlaubteTabellen)) {
            //Mach weiter...

            Hallo,

            nein, das geht nicht, weil ich nicht weiß, was für Tabellen existieren können. Theoretisch kann jeder erdenkliche Tabellenname vorkommen.

            Kommentar


            • #7
              Zitat von dingsda Beitrag anzeigen
              das heißt, dass weder prepared statements noch mysqli->real_escape_string() / pdo->quote() dich schützen, wenn du tabellen- oder feldname aus benutzereingaben übernimmst.
              diese funktionen sind dafür da um datenbankinhalte abzusichern
              Dann kann man nichts machen. Danke euch für die Hinweise.

              Kommentar


              • #8
                Zitat von Fuerst Rainer Beitrag anzeigen
                Hallo,

                nein, das geht nicht, weil ich nicht weiß, was für Tabellen existieren können. Theoretisch kann jeder erdenkliche Tabellenname vorkommen.
                Und sowas wie

                Code:
                SHOW TABLES
                hilft da auch nicht weiter?

                Wat issn dat für ne Anwendung?
                Es ist schon alles gesagt. Nur noch nicht von allen.

                Kommentar


                • #9
                  Zitat von drsoong Beitrag anzeigen
                  Und sowas wie

                  Code:
                  SHOW TABLES
                  hilft da auch nicht weiter?
                  ist aber auch nicht grad ne tolle alternative. will man wirklich dem user erlauben in jede mögliche tabelle etwas einzutragen nur weil sie existiert?
                  PHP-Code:
                  $input 'user_has_permission';
                  $sql "insert into `$input` ..."
                  Zitat von drsoong Beitrag anzeigen
                  Wat issn dat für ne Anwendung?
                  frag ich mich auch
                  liebe Grüße
                  Fräulein Dingsda

                  Kommentar


                  • #10
                    Zitat von drsoong Beitrag anzeigen
                    Und sowas wie

                    Code:
                    SHOW TABLES
                    hilft da auch nicht weiter?

                    Wat issn dat für ne Anwendung?

                    mit SHOW TABLES werden die Tabellennamen eingeblendet, die der User sich aussuchen kann. Aber dann wird seine Auswahl mit POST eines Formulars zum INSERT INTO Befehl weitergeleitet.

                    Dieser POST ist manipulierbar, denke ich!? Und deswegen sollte es abgesichert werden.

                    He, wo ich das jetzt schreibe ...

                    Stimmt, dann klappt die Whiteliste doch! Danke euch

                    Kommentar


                    • #11
                      will man wirklich dem user erlauben in jede mögliche tabelle etwas einzutragen nur weil sie existiert?
                      Ganz so platt habe ich das auch nicht gemeint. Fuerst Rainer meinte ja
                      weil ich nicht weiß, was für Tabellen existieren können
                      Und das kann man zunächst schon mit besagter Query ermitteln.

                      Ein bischen Filtern muss der Fuerst dann aber schon noch.
                      Es ist schon alles gesagt. Nur noch nicht von allen.

                      Kommentar


                      • #12
                        Ein bischen Filtern muss der Fuerst dann aber schon noch.
                        Oder auch nicht

                        mit SHOW TABLES werden die Tabellennamen eingeblendet, die der User sich aussuchen kann
                        Es ist schon alles gesagt. Nur noch nicht von allen.

                        Kommentar


                        • #13
                          dann muss er aber mal wissen, in welche tabelle der user was reinschreiben darf. und wenn er anscheinend nicht mal weiß, welche tabellen existieren wird er das erst recht nicht wissen. und dabei leider keine automatische funktion helfen.
                          warum er das nicht weiß ist mir aber grad immer noch ein rätsel
                          liebe Grüße
                          Fräulein Dingsda

                          Kommentar


                          • #14
                            warum er das nicht weiß ist mir aber grad immer noch ein rätse
                            Ich sehe gerade, dass der TE erst jüngst von "SHOW TABLES" erfahren hat. http://www.php.de/php-einsteiger/108...tml#post798816Mag sein, dass das Thema noch etwas unaufgeräumt in seinem Kopf herumschwirrt. So kennt man das ja auch von sich selbst manchmal.
                            Es ist schon alles gesagt. Nur noch nicht von allen.

                            Kommentar

                            Lädt...
                            X