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%22Wie 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]
Na ob das bei dem Gebrauch an CGI-Toolkit-Funktionen nun an Ada liegt [img]
http://www.fb18.de/gfx/22.gif[/img]
<? echo $a; ?> ?
Ok, du kannst nicht (so einfach) alle Variablen nacheinander ausgeben, aber da sehe ich auch nicht so den Einsatzzweck zu. ;)
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]
<? 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?
Dann nimmt man
<? echo html_entities($a); ?>
[img]
http://www.fb18.de/gfx/28.gif[/img]
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.
Wenn du nur die Debug-Zwecken alle übersendeten Daten ausspucken willst, tut's auch <?php phpinfo(); ?>
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. ;)
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ß>
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.
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.
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]