ulimativ: $_POST und sicherheit

Hallo Forum,
ich habe schon etwas im Internet umgeschaut, aber konnte nicht wirklich sinnvolle Informationen finden.

Ich habe Zweifel an der Sicherheit meiner PHP Anwendungen, weil mich jemand anderes verunsichert hat.

Wenn ich $_POST Daten eines Formulars in Datenbank abfragen einbaue und ich die Variablen nicht bereinige kann mir jemand mit irgendwelchen aingaben auf meine Datenbank zugreifen? Mit PHP 4.3 oder höher werden ja ' oder so automatisch zu ' umgewandelt.
Also glaube ich dass mir wenig passieren kann.
Sicherlich macht es Sinn die Daten zu säubern.

Wie geht Ihr mit $_POST-Daten vor???
Gruss Uli

  1. Hallo,

    also ich glaube das $_POST sicher ist, aber deine HTTP-Anbindung ist nicht sicher!
    Denn jede HTTP-Verbindung kann man "leicht" knacken (ka wie, aber für Hacker angeblich kein Prob)
    Deswegen sollte man Formulardaten über eine SSI Verbindung senden.

    Außerdem kann man Passwörter auch irgendwie mit Javascript verschlüsseln, ein schutz dagegen, das keiner dein Passwort klaut

    MFG
    Andavos

    --
    http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
    1. Jo,
      Es geht mir nicht um die Passwörter, sondern um meine Datenbank.
      Nicht dass mir da eine irgendeinen Befehl wie Drop database o´der so absetzen kann...
      Uli

      1. Hallo,
        ist die frage, wo du so ein Formular hast, wo man drop db reinschreiben kann.

        Klar mit PHPMyAdmin geht es, aber das ist ja fast immer mit einem Passwort versehen.
        Aber selber einen Script/Formular dazu haben, ist dumm, denn es nur jemand das PW bekommen und kann das dann machen.

        Aber in einem Gästebuch/Formular kann keiner drop db... schreiben, weil der Text als String gespeichert wird. Du müsstest den String aber dann per mysql_query ausfürhen lassen, was du hoffentlich nicht machst.

        MFG
        Andavos

        --
        http://www.rpgcommunity.de/clanwissen/index.php Webdesign, PHP, Clan-Aufbau und mehr
  2. Hello Ulli,

    man kann datenbankabfragen "injizieren". Das bedeutet, dass man der Anfrage Zeichenfolgen beimischt, die in der API dann in SQL-Befehle umgesetzt werden. Das ist aber eigentlich kein Problem der Datenbank welbst, sondern ihrer Textschnittstelle (SQL) und des davorgeschalteten API (z.B. PHP).

    Um beim Beispiel MySQL - PHP zu bleiben:

    Wenn man z.B versäumt, die Häkchen zu maskieren, wirken diese bei der Übergabe des Querystrings wie eine Unterbrechnung des Datenwertes und machen aus einem Dieses Datenwertes dann z.B. ein SQL-Statement.

    Das kann böse Folgen haben.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hi Tom,

      Um beim Beispiel MySQL - PHP zu bleiben:

      Wenn man z.B versäumt, die Häkchen zu maskieren, wirken diese bei der Übergabe des Querystrings wie eine Unterbrechnung des Datenwertes und machen aus einem Dieses Datenwertes dann z.B. ein SQL-Statement.

      Wie meinst du Häkchen zu maskieren?

      konkret habe ich eine eine Datenbankabfrage nach dem schema z.B.

      UPDATE test SET (spalte = ' ."$_POST["spalte"] ."' ...
      also jetzt mal ohne die Hochkommas und so.

      Wenn im $_POST["spalte"] nun so etwas drinsteht
      "'; DROP Table test; --" macht mir PHP ja automatisch "'; DROP Table test; --" daraus.
      Also eigentlich keine Gefahr oder überseh ich was???

      Uli

  3. Hi,

    Wenn ich $_POST Daten eines Formulars in Datenbank abfragen einbaue und ich die Variablen nicht bereinige kann mir jemand mit irgendwelchen aingaben auf meine Datenbank zugreifen? Mit PHP 4.3 oder höher werden ja ' oder so automatisch zu ' umgewandelt.
    Also glaube ich dass mir wenig passieren kann.

    1;drop table blubb;

    Wenn der Wert jetzt, weil es eine Zahl sein muß: ohne Anführungszeichen, unüberprüft in Dein SQL eingebaut wird, kann Deine Tabelle blubb gelöscht werden. Z.B. wenn statt 1 eben obengenanntes angegeben wird, wird aus
    select bla from blubb where id > 1
    dann eben
    select bla from blubb where id > 1;drop table blubb;

    Da hilft es auch nicht, daß die ' maskiert werden - denn da sind keine...

    cu,
    Andreas

    --
    MudGuard? Siehe http://www.mud-guard.de/
    1. Hi,

      ich weiß nicht, ob wir hier nur über PHP reden, aber wenn ich mich recht erinnere kann doch mysql_query nur einen Befehl pro Aufruf ausführen, oder? Demnach würde das obige Beispiel fehlschlagen.

      Generell hast du natürlich recht, aber wenn wir schon von magic_quotes ausgehen, dann sollte man das hier wohl auch erwähnen, denke ich.

      MfG
      Rouven

      --

      -------------------
      ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
      1. Moin!

        ich weiß nicht, ob wir hier nur über PHP reden, aber wenn ich mich recht erinnere kann doch mysql_query nur einen Befehl pro Aufruf ausführen, oder? Demnach würde das obige Beispiel fehlschlagen.

        Das kenne ich auch so. Wobei ich mir noch nicht im klaren bin, was sql.safe_mode in der PHP.ini eigentlich so treibt. Ich geh mal lesen....

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Hello,

          ich weiß nicht, ob wir hier nur über PHP reden, aber wenn ich mich recht erinnere kann doch mysql_query nur einen Befehl pro Aufruf ausführen, oder? Demnach würde das obige Beispiel fehlschlagen.

          Das kenne ich auch so. Wobei ich mir noch nicht im klaren bin, was sql.safe_mode in der PHP.ini eigentlich so treibt. Ich geh mal lesen....

          Auf so dünnes Eis würde ich mich aber nicth begeben. Das ist zwar im Moment so, aber es kann sich auch mal Ändern und dann ist die Lücke immer noch din im Script.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  4. Also besteht die Gefahr darin, wenn ich zum Beispiel Integer in meinen Query string einbaue. unbd keine ' habe oder??