Felix Riesterer: Tabellenwerte in <form eingeben

Beitrag lesen

Lieber Martin,

Aber willst du andeuten, dass man auch abprüfen sollte, ob zusätzliche, unbekannte Parameter angekommen sind?

ich gehe davon aus, dass hier im Wesentlichen Hobbyisten mitlesen, die vielleicht die Bequemlichkeit in Anspruch nehmen möchten, die der Mechanismus von PHP bietet, indem er verschachtelte Array-Strukturen über entsprechend gestaltete Indices in den POST-Daten erstellt. Wenn die Bequemlichkeit dann auch noch so weit geht, dass man blind darauf vertraut, dass die Struktur immer so aussieht, wie man das im Idealfall gerne möchte, kann das schwierig bis gefährlich werden.

Beispiel:

// erwartete Struktur
$_POST['data'] = [
  'what' => [
    'who' => string,
    'age' => integer
    'txt' => string
  ],
  'how' => string
];

Wenn nun die POST-Daten so aussehen (für bessere Lesbarkeit habe ich Zeilenumbrüche eingefügt), dann kommt es sehr darauf an, was Deine Applikation damit macht:

data[what][who]=nobody
&data[what][age]=confidential
&data[what][txt]=I%20disagree%20completely!
&data[how]=save
&data[bogus][nonsense]=bad%20SQL%20code

Auf PHP-Seite ergäbe das folgende Struktur:

// erhaltene Struktur
$_POST['data'] = [
  'what' => [
    'who' => 'nobody',
    'age' => 'confidential', // kein Integer!
    'txt' => 'I disagree completely!'
  ],
  'how' => 'save',
  // unerwartetes Teilarray!
  'bogus' => [
    'nonsense' => 'bad SQL code'
  ]
];

Nicht nur sehen wir, dass $_POST['data']['who']['age'] keinen zu Integer passenden Wert enthält, wir finden auch ein weiteres Teilarray $_POST['data']['bogus'], welches wir nicht erwartet haben. Wenn wir nun blind aus dem Array SQL-Statements bauen, die etwas in die Datenbank schreiben, dann führt das eventuell zu Programmfehlern.

Daher darf man sich meiner Meinung nach nie auf die generierte Array-Struktur verlassen. Dass @Linuchs mit dem PHP-Mechanismus ein grundlegenderes Problem hat, weil er sich nicht sicher ist, wie er Feldnamen gestalten soll, damit eine für ihn irgendwie verarbeitbare Array-Struktur entsteht, kann man gleich damit lösen, dass man diesen Mechanismus als unzuverlässig verteufelt, um solche Unsicherheiten und Angriffsmöglichkeiten von vornherein auszuschließen.

Liebe Grüße

Felix Riesterer

0 44

Tabellenwerte in <form eingeben

Linuchs
  • html
  1. 0
    Raktenbürokratieverbesserer
    1. 0
      Linuchs
      1. 0
        Raketentester
        1. 0
          Linuchs
          1. 0
            Raketentester
            1. 0
              Raketentester
          2. 0
            Linuchs
            1. 0
              Linuchs
            2. 0
              Raketenprogramminspektor
            3. 0
              Matthias Apsel
              1. 0
                Der Martin
  2. -1
    Felix Riesterer
    • html
    • javascript
    • php
    1. 0
      pl
      1. 0
        Felix Riesterer
        1. -1

          Best Practice

          pl
          1. -1

            Best Practice in konkreten Anwendungsfall

            pl
  3. -1
    php
    1. 0
      Felix Riesterer
      1. 0
        pl
      2. 0
        Rolf B
        1. 0
          Felix Riesterer
          1. 0
            Der Martin
            • datenmodell
            • html
            1. 0
              Felix Riesterer
              1. 0
                Rolf B
                1. 0
                  Felix Riesterer
              2. -1

                Requestparameter sind tainted!

                pl
                1. 0
                  Rolf B
                  1. 0
                    pl
                2. 0
                  Raketenchemiker
                  1. 0
                    pl
                    1. 0
                      pl
                      1. 0
                        Raketensicherheitsinspektor
                        1. 0
                          pl
                          1. 0
                            Raketenflugbahnkenner
                    2. 0
                      Raketenhandbuchleser
                      1. 0
                        pl
                        1. 0
                          Raketenhandbuchleser und -Tester
                  2. 0
                    pl
                    1. 0
                      Raketenunsinndiagnostiker
  4. 1
    robertroth
    • datenbank
    • html
    • webserver
    1. 0
      pl
    2. 0
      Raktensinnsucher
      1. 0
        TS
        • client
        • datenbank
        • webserver