Enrico: Bösartigen Code filtern / Shell-Kommandos

Hallo,

gerade beschäftige ich mich mit der Absicherung von User-Eingaben in Formularen gegen bösartigen Code.

Aktuell habe ich folgende 3 "Bereinigungen" eingebaut:

$Feld_Inhalt = strip_tags ($Feld_Inhalt);
$Feld_Inhalt = escapeshellarg ($Feld_Inhalt);
$Feld_Inhalt = escapeshellcmd ($Feld_Inhalt);

Ist damit 100% sichergestellt, dass keine Shell-Kommandos übernommen werden ? Werden hier auch Devices wie CON, PRN, AUX etc abgefangen ?

Reicht dies, um nahezu sicher zu sein ?

Eine Absicherung gegen SQL-Injektionen ist nicht notwendig, weil ich mit Textdateien arbeite.

Enrico

  1. Hi,

    gerade beschäftige ich mich mit der Absicherung von User-Eingaben in Formularen gegen bösartigen Code.

    Das ist zwar sehr löblich, doch nicht ganz korrekt. Das führt zu Problemen, was Dir aber auch schon aufgefallen ist.

    Aktuell habe ich folgende 3 "Bereinigungen" eingebaut:

    [..]

    Reicht dies, um nahezu sicher zu sein ?

    Für mehr oder weniger großzügige Auslegungen von "nahezu" mit Sicherheit.

    Besser ist es jedoch, einfach nur das zuzulassen, was Du drin haben möchtest und den Rest wegzuschmeißen und nicht umgekehrt.

    Was soll den rein in die Formulare? Nur Buchstaben und Zahlen und ein @-Zeichen für Emailadressen? Wieviele Zeichen? Was soll nachher damit getan werden?

    Eine Absicherung gegen SQL-Injektionen ist nicht notwendig, weil ich mit Textdateien arbeite.

    Wenn Du von Anfang an sauber arbeitest sind solche Extrawünsche bereits im Grundpaket enthalten. Das wirft aber auch das eigentliche Problem auf: du kurierst nur _einzelne_ Symptome und bekommst dann Schwierigkeiten, wenn irgendetwas anders dazukommt. Du muß immer davon ausgehen, das es Fallen gibt, die Du nicht kennst oder die neu hinzukommen.

    so short

    Christoph Zurnieden

    1. Hallo Christoph,

      Gut, ich sehe, dass ich auf dem Gebiet "Sicherheit" noch einiges einbinden werde, um nahezu auf der sicheren Seite zu sein.

      » Was soll den rein in die Formulare?

      Da bin ich intensiv am Ball, nur ist es - wie ich festgestellt habe - sehr schwierig, wenn man alles unter Kontrolle haben will.

      Gruss und Danke :-)

      Enrico

      1. Hi,

        Gut, ich sehe, dass ich auf dem Gebiet "Sicherheit" noch einiges einbinden werde, um nahezu auf der sicheren Seite zu sein.

        Ich hoffe, das Du mich nicht mißverstanden hast?
        Es nützt wenig, die Löcher zu stopfen, es ist sinnvoller sie zu öffnen.
        Ähm ... ja, ich sehe, Du brauchst ein Beispiel ;-)

        Stell' Dir vor Du hast ein Sieb. Da machst Du jetzt alle Löcher zu, die Du nicht brauchst. 20.000 Löcher sind drin, 5 brauchst Du. Wäre es nicht sinnvoller, ein Blech zu nehmen und die nötigen 5 Löcher da reinzubohren? Du könntest auf jeden Fall schonmal keines vergessen zu schließen, sind ja schon alle zu.

        » Was soll den rein in die Formulare?

        Da bin ich intensiv am Ball, nur ist es - wie ich festgestellt habe - sehr schwierig, wenn man alles unter Kontrolle haben will.

        Ich weiß ja nicht wofür die Formulare sein sollen, Du gibst ja keine Seite an. (Kein Vorwurf, es mag Gründe dafür geben, die kennt man natürlich auch nicht).
        Wenn Du wirklich nur Adressen sammeln möchtest, dann brauchst Du auch nur Buchstaben und Zahlen (und evt das @). Keinerlei Sonderzeichen, nix. Kurzer Regex a la [A-za-z@äöüÄÖÜ] (nein, _ganz_ so einfach ist's nun doch nicht, klar ;-) und den Rest einfach weggeschmissen.
        Dann und wirklich _erst_ dann kannst Du Dir überlegen ob Du z.B. für ein Blog, Board, Forum o.ä. noch MarkUp zulassen möchtest, Links o.ä. Das baust Du dann sukzessive ein.

        Es gibt jede Menge Code im Netz. Schau Dich um, schmeiß Google an (die Groups nicht vergessen!), denk an php.net usw.
        Kannst auch gerne wiederkommen, wenn 'was ist, hier gibt es einige Spezialisten, die helfen gerne.

        so short

        Christoph Zurnieden