Andreas Bierhals: Sicherheit eines cgi-skripts

Beitrag lesen

Moin,

Nachdem ich mittlerweile ein paar cgi-Programme geschrieben habe (Formularmailer, counter, Suchmaschine), sollten diese nun bevor sie ins WEB gestellt werden auf ihre Sicherheit überprüft werden. Gibt es da irgendwelche Tipps + Tricks?
Oder auf was muss ich achten?

Im Web findet sich bereits zahlreiche Dokumentation zu Thema "cgi-security", Beispiel: http://cgi.resourceindex.com/Documentation/Security/.

Dinge, die mir spontan zu diesem Thema einfallen sind (ohne Anspruch auf Vollständigkeit).

  • Als erstes sollte man peinlich genau darauf achten, daß  cgi-Skripte nur ausgeführt und nicht etwa downgeloadet werden können. Normalerweise sollte das kein Thema sein, aber bei einigen exotischeren Webservern sollte man wenigstens mal nachgucken...

  • Man kann sich in keiner Weise darauf verlassen, daß die Formularfelder, welche Du für das cgi-Skript vorgesehen hast, irgendetwas damit zu tun haben, was dann tatsächlich beim Skript ankommt. Es ist immer möglich, sich irgendein eigenes unsinniges Formular zu basteln und ein

<form action="http://Dein.Ahnungsloses.CgiScript.com" method="post">

voranzustellen.

  • Man kann sich auch nicht darauf verlassen, daß Zeichenketten aus Formularfeldern eine bestimmte Maximallänge nicht überschreiten. Bösartige User könnten z.B. in ein Feld mit der Bezeichnung "eMail" den Inhalt einer 5 MB großen Textdatei kopieren und das dann abschicken. Bei Perl ist dies aufgrund der automatisch-flexiblen Stringverwaltung meist weniger ein Problem als z.B. bei schlecht programmierten C-Programmen, in denen oft die Länge der String-Buffer fest begrenzt wird. Geschickte Hacker können sogar Buffer-Überläufe dazu ausnutzen, daß unerwünschter Code auf dem Server-Rechner ausgeführt wird. Eine Idee wäre evtl., gleich ganz am Anfang des Skriptes zu testen, ob CONTENT_LENGTH sich innerhalb vernünftiger Maßstäbe bewegt und im Falle von z.B. CONTENT_LENGTH>10^5 das Skript gleich abzubrechen oder so.

  • Wenn von perl aus Systemkommandos ausgeführt werden, ist besondere Vorsicht angesagt, da mittels pipe-Zeichen etc. harmlos aussehende Befehle zu völlig anderen umgemünzt werden können.
    Also aus allen Variablen, die in Systemkommandos eingehen, Zeichen wie < > usw. entfernen, oder besser noch eine Liste mit zulässigen Zeichen festlegen und alles andere herauslöschen.

Ich hoffe, das hilft Dir für den Anfang erstmal weiter...

Viele Grüße

Andreas