FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Praktische Informatik (HS)

Sichere Programmierung

Sichere Programmierung 2004-05-22 15:31
low_level
Ich habe gerade mit Ada mein erstes CGI-Skript geschrieben. Und ich bin begeistert:

* 11 Zeilen Code, um die CGI-Variablen auszugeben
* Der Code ist lesbar
* Das Programm enthält keine XSS-Sicherheitslücke
* Andere Sicherheitslücken wahrscheinlich auch nicht
* Die Ausgabe ist schön formatiert

with CGI; use CGI; procedure Hello is begin Put_CGI_Header; Put_HTML_Head(Title => "Hello, World"); Put_Variables; Put_HTML_Tail; end Hello;
http://rillig.dyndns.org/cgi-bin/hello?a=b%3cscript%3e%3f%00%21%0a%22

Wie sähe dieses Programm wohl in Perl oder PHP aus?

low_level, der keine Lust mehr hat, Perl oder PHP zu schreiben. [img]http://www.fb18.de/gfx/28.gif[/img]

Re: Sichere Programmierung 2004-05-22 15:45
TriPhoenix
Na ob das bei dem Gebrauch an CGI-Toolkit-Funktionen nun an Ada liegt [img]http://www.fb18.de/gfx/22.gif[/img]

Re: Sichere Programmierung 2004-05-22 16:33
chris
<? echo $a; ?> ?
Ok, du kannst nicht (so einfach) alle Variablen nacheinander ausgeben, aber da sehe ich auch nicht so den Einsatzzweck zu. ;)

Re: Sichere Programmierung 2004-05-22 16:54
low_level
Na ob das bei dem Gebrauch an CGI-Toolkit-Funktionen nun an Ada liegt [img]http://www.fb18.de/gfx/22.gif[/img]

Auf jeden Fall implementiert die Standardprozedur Put_All_Variables das korrekte Codieren in HTML. Und das ist doch nett, oder?

Der Rest der Library ist leider nicht ganz so DAU-sicher, aber ich hab vorsichtshalber mal einen Patch an den Autor geschickt. [img]http://www.fb18.de/gfx/22.gif[/img]

Re: Sichere Programmierung 2004-05-22 16:55
low_level
<? echo $a; ?> ?
Ok, du kannst nicht (so einfach) alle Variablen nacheinander ausgeben, aber da sehe ich auch nicht so den Einsatzzweck zu. ;)

Und was passiert, wenn die Variable $a den String "<script>alert('foo');</script>" enthält?

Re: Sichere Programmierung 2004-05-22 16:58
TriPhoenix
Dann nimmt man
<? echo html_entities($a); ?>

[img]http://www.fb18.de/gfx/28.gif[/img]

Re: Sichere Programmierung 2004-05-22 17:02
low_level
Dann nimmt man
<? echo html_entities($a); ?>

[img]http://www.fb18.de/gfx/28.gif[/img]

Na gut. Aber bei mir stand explizit in der Doku, daß man HTML_Encode auf _ALLE_ Daten anwenden soll, und das fand ich cool.

– ALL VARIABLE DATA sent from the application should be filtered through
– HTML_Encode unless it's already in HTML format or you know that
– it can't have these special characters.
– Even if the data appears to have come from the user, it should be filtered;
– the user may be unknowingly clicking though a malicious link.

Re: Sichere Programmierung 2004-05-22 17:09
korelstar
Wenn du nur die Debug-Zwecken alle übersendeten Daten ausspucken willst, tut's auch <?php phpinfo(); ?>

Re: Sichere Programmierung 2004-05-22 18:24
chris
Und was passiert, wenn die Variable $a den String "<script>alert('foo');</script>" enthält?

Dann gibt der Webserver "<script>alert('foo');</script>" an den Browser.
HTML per Default zu zerstören wäre ja doof, dann würde in Gästebüchern etc ja keiner mehr einen Link per <a href> setzen können.
Will man das nicht nimmt man was Triphoenix sagte, will man einige Tags durchlassen und andere nicht nimmt man strip_tags()…

Zudem mag ich keine CGI-Interfaces, deshalb mag ich PHP und SSI. ;)

Re: Sichere Programmierung 2004-05-22 18:36
korelstar
Zudem mag ich keine CGI-Interfaces, deshalb mag ich PHP und SSI. ;)

<klugscheiß>PHP gibts (und wird auch oft so eingesetzt) genauso per CGI wie alles andere. Einen wirklichen Unterschied von der Anwendung gibt's da nicht. Und Perl gibt es genau wie PHP auch als Webserver-Modul ohne CGI.</klugscheiß>

Re: Sichere Programmierung 2004-05-22 18:44
chris
PHP gibts (und wird auch oft so eingesetzt) genauso per CGI wie alles andere.

Ach was. Erzähl.
Das Modul ist für Scripting als Shellersatz nett, aber als CGI würd ich das nicht einsetzen.

Und Perl gibt es genau wie PHP auch als Webserver-Modul ohne CGI.

Ja. Es gibt aber nicht nur PHP und Perl als Skriptsprachen, wie unten bewiesen. Außerdem ist Perl die Essenz des Bösen, damit fällt es sowieso raus.

Re: Sichere Programmierung 2004-05-22 19:31
korelstar
Das Modul ist für Scripting als Shellersatz nett
Modul als Shellersetz funktioniert nicht.

aber als CGI würd ich das nicht einsetzen.
Warum? Es gibt nicht für jeden Webserver ein PHP-Modul. Da kann man schonmal auf CGI angewiesen sein um PHP nutzen zu können. Macht doch auch kaum Unterschied.

Es gibt aber nicht nur PHP und Perl als Skriptsprachen, wie unten bewiesen.
Habe ich auch nicht behauptet.

Re: Sichere Programmierung 2004-05-22 23:52
chris
Unsauber formuliert, ne Shell ist es nicht, klar.
Ich meine halt für Skripte, ohne einen Webserver zu bemühen.

Warum? Es gibt nicht für jeden Webserver ein PHP-Modul.

Man kann aber jeden Webserver deinstallieren und dafür einen funktionellen einsetzen. [img]http://www.fb18.de/gfx/25.gif[/img]