Schrift
[thread]624[/thread]

CGI Sicherheit: Vermeidung gefährlicher Inhalte

Leser: 2


<< |< 1 2 3 4 ... 17 >| >> 166 Einträge, 17 Seiten
Gast Gast
 2005-12-12 17:10
#6118 #6118
Hallo Leute,

nachdem ich nun im Netz bereits unzählige Artikel über die Sicherheit von CGI Skripten gelesen habe, bin ich völlig ratlos geworden.

Ich verwende CGI.pm
aber damit allein scheint das Problem nicht lösbar zu sein.

Ich verwende HTML::Entyties
damit wird jeder HTML-Code (soweit ich das richtig sehe) vor dem Speichern in Hex-Code umgewandelt

Soweit ist das auch alles OK.
Mein Problem ist nun die Ausgabe von Datei-Inhalten die eben diesen Hex-Code enthalten.
Die Umwandlung ist ja einfach - aber nach der Umwandlung laufe ich dann ja wieder in die Falle dass jede Art von Zeichen per 'print' ausgeführt wird.

Habe ich mein Problem verständlich beschrieben?
Kann mir jemand helfen das Problem zu lösen?

Danke.
Antworten mit Zitat
esskar
 2005-12-12 17:26
#6119 #6119
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
was kann print denn für schaden anrichten?
Und wo gibst du den HTML code den aus? bzw. was ist es denn für ein system, dass du programmiert hast?
Antworten mit Zitat
Relais
 2005-12-12 17:27
#6120 #6120
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hmm, print ist eher dafür bekannt, etwas aszudrucken, als es auszuführen.
Wovor hast Du Sorge, etwa daß jemand ein Fremdprogramm startet?
Das kann Dir passieren, wenn Du ungeprüften Variableninhalte an andere Programme oder an eval übergibst oder in später auszuführenden Code einbettest (SQL etwa), - also vermeide das zuerst.
Da wo Du es doch brauchst, prüfst Du den Inhalt, ob es Dir gefällt ihn auszuführen.

Das war's in einer Nußschale. Wovor genau hast Du nun Sorgen?
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Antworten mit Zitat
Taulmarill
 2005-12-12 18:54
#6121 #6121
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Perl hat eigendlich mit der sicherheit keine grossen probleme, solange man einige grundrichtlinien beachtet.

1. lese allen userinput über die param funktion von CGI.pm ein (machst du ja anscheinend schon)
2. verwende keinen userinput in aufrufen von systemprogrammen. also z.b. system( "systembefehl" ); oder `systembefehl`
3. benutze kein eval.
4. wenn du datenbanken benutzt, dann benutze platzhalter. wenn du werte über platzhalter in ein sql-statement einfügst anstatt direkt variablen reinzuschreiben werden die strings/werte automatisch von deinem datenbanktreiber geprüft.

achja use strict; use warnings; aber das sollte eigendlich sowieso selbstverständlich sein.

wenn du diese punkte beachtest, sollte dir eigendlich nichts passieren. wenn du einen der punkte nicht beachten kannst, oder sorgen wegen einem bestimmten aufruf hast, dann stelle noch einmal eine konkretere frage.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Antworten mit Zitat
nepos
 2005-12-12 19:39
#6122 #6122
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Und wenn man doch mal User-Input fuer Systemaufrufe oder aehnliches braucht, dann halt entsprechend vorher pruefen.
Eventuell kann auch der Tainted-Mode hilfreich sein. Allerdings laeuft damit z.B. CGI::Session nicht.
Antworten mit Zitat
pq
 2005-12-12 19:42
#6123 #6123
User since
2003-08-04
12207 Artikel
Admin1
[Homepage]
user image
[quote=Taulmarill,12.12.2005, 17:54]3. benutze kein eval.[/quote]
zumindest kein string-eval. block-eval, a la try/catch ist ja ok.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Antworten mit Zitat
Dubu
 2005-12-13 01:10
#6124 #6124
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Bisher wurde in den Kommentaren nur davon ausgegangen, dass eine Gefahr fuer den Webserver abzuwenden ist. Aber andere Clients sind ebenso in Gefahr (z. B. durch Cross Site Scripting), wenn ungeprueft Formularinhalte wieder veroeffentlicht werden.
Antworten mit Zitat
Gast Gast
 2005-12-13 13:16
#6125 #6125
[quote=esskar,12.12.2005, 16:26]was kann print denn für schaden anrichten?
Und wo gibst du den HTML code den aus? bzw. was ist es denn für ein system, dass du programmiert hast?[/quote]
Mit:
print <<EOF;
HTML Tags
EOF
und eingebetteten Variablen, könnten die tollsten Sachen ausgeführt werden und Schaden anrichten.
(hab ich jedenfalls so gelesen)
Antworten mit Zitat
Gast Gast
 2005-12-13 13:23
#6126 #6126
[quote=Relais,12.12.2005, 16:27]Hmm, print ist eher dafür bekannt, etwas aszudrucken, als es auszuführen.
Wovor hast Du Sorge, etwa daß jemand ein Fremdprogramm startet?
Das kann Dir passieren, wenn Du ungeprüften Variableninhalte an andere Programme oder an eval übergibst oder in später auszuführenden Code einbettest (SQL etwa), - also vermeide das zuerst.
Da wo Du es doch brauchst, prüfst Du den Inhalt, ob es Dir gefällt ihn auszuführen.

Das war's in einer Nußschale. Wovor genau hast Du nun Sorgen?[/quote]
Sorgen habe ich z.B. dann, wenn jemand eine Grafik (Bild) hochläd.
Was passiert wenn das kein Bild (jpg, gif, usw.) ist, sondern eine Programm-Datei die nur als image.jpg oder image.gif (etc.) kaschiert ist?
Will sagen: was passiert wenn diese kaschierte Bild-Datei innerhalb eines Here-Dokuments ausgeführt wird?
Antworten mit Zitat
Gast Gast
 2005-12-13 13:26
#6127 #6127
[quote=Taulmarill,12.12.2005, 17:54]Perl hat eigendlich mit der sicherheit keine grossen probleme, solange man einige grundrichtlinien beachtet.

1. lese allen userinput über die param funktion von CGI.pm ein (machst du ja anscheinend schon)
2. verwende keinen userinput in aufrufen von systemprogrammen. also z.b. system( "systembefehl" ); oder `systembefehl`
3. benutze kein eval.
4. wenn du datenbanken benutzt, dann benutze platzhalter. wenn du werte über platzhalter in ein sql-statement einfügst anstatt direkt variablen reinzuschreiben werden die strings/werte automatisch von deinem datenbanktreiber geprüft.

achja use strict; use warnings; aber das sollte eigendlich sowieso selbstverständlich sein.

wenn du diese punkte beachtest, sollte dir eigendlich nichts passieren. wenn du einen der punkte nicht beachten kannst, oder sorgen wegen einem bestimmten aufruf hast, dann stelle noch einmal eine konkretere frage.[/quote]
Ja, diese Punkte habe ich alle beachtet.
(und natürlich auch use strict und use warnings) ;)
Antworten mit Zitat
<< |< 1 2 3 4 ... 17 >| >> 166 Einträge, 17 Seiten



View all threads created 2005-12-12 17:10.