Schrift
[thread]261[/thread]

Sicherheit von Formulardaten: Gefährlicher User-Code (Seite 2)

Leser: 1


<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten
Gast Gast
 2004-05-23 18:21
#2492 #2492
@tomlong
Danke für die Links :)
einige kannte ich schon - die anderen hab ich jetzt gelesen
aber irgendwie hilft mir das nicht weiter.
Es wird überall immer nur von 'gefährlichem' Code geschrieben aber niemand bringt mal Beispiele dafür was denn nun eigendlich 'gefährlicher' Code ist.
Nun mal raus mit der Sprache - welchen 'bösartigen' Code muß ich in meine Formulare einsetzen um zu testen ob die Dinger 'sicher' sind.
Wenn solcher Code hier nicht veröffentlicht werden soll, dann verstehe ich das völlig - wäre aber dennoch dankbar für ein paar Zeilen in meine PM-Box.\n\n

<!--EDIT|Dieter|1085322148-->
steffenw
 2004-05-23 22:10
#2493 #2493
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Was mit zum Thema Sicherheit gleich einfällt, ist:

Code: (dl )
open FILE, '<', $filename;
ist ungefährlicher als
Code: (dl )
open FILE, $filename;


Bei Datenbankabfragen keine CGI-Parameter im Statment-String auflösen, sondern diese erst bei execute oder do übergeben.

Und ..., alle CGI-Parameter werden erst auf Sinnfälligkeit geprüft, bevor sie überhaupt verwendet werden. Regex ist da oft eine gute Wahl.

CGI-Parameter in Regex nur zwischen \Q und \E verwenden.
$SIG{USER} = sub {love 'Perl' or die};
[E|B]
 2004-05-23 22:42
#2494 #2494
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Wieso siehts aus mit Taint-Mode?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
steffenw
 2004-05-24 00:14
#2495 #2495
User since
2003-08-15
692 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ja, Taint-Mode habe ich zu Hause auf meinem Web-Server auch laufen. In der Firma nicht, weil es Probleme mit einigen Modulen gab. Ist aber schon eine Weile her, ich weiß nicht mehr, welche es waren. Aber zu Hause ist sicher auch die größere Gefahr :rock: ? Ich fand's aber schade, weil es doch einiges bringt. Man könnte fast sagen, so wie strict. Man wird gezwungen, sich Gedanken zu machen.\n\n

<!--EDIT|steffenw|1085343453-->
$SIG{USER} = sub {love 'Perl' or die};
Gast Gast
 2004-05-24 00:32
#2496 #2496
Leute - irgenwie versteht Ihr mich nicht ...
Ich benötige keine Hinweise wie 'gefährlicher' Code negiert werden kann; ich benötige nur Beispiele von 'gefährlichem' Code damit ich diesen Code negieren kann.
esskar
 2004-05-24 01:14
#2497 #2497
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code: (dl )
1
2
3
4
5
6
7
8
9
10
my %subst = (
q|&| => q|&amp;|,
q|"| => q|&quot;|,
q|<| => q|&lt;|,
q|>| => q|&gt;|,
q|'| => q|&'|,
q|`| => q|&`|,
);

$$data =~ s/($_)/$subst{$1}/sg foreach keys %subst;


ist gefährlicher code! :)
wenn du pech hast, und
q|&| => q|&amp;| schlägt als letztes bzw. nicht als erstes zu, dann sitzt du ganz schön in der tinte!
Strat
 2004-05-24 01:35
#2498 #2498
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
Welcher Code gefaehrlich ist oder nicht, kann ich nicht sagen, weil du nicht dazuschreibst, was mit den eingegebenen Daten gemacht werden soll. Wichtig ist halt, dass die nie ungeprueft verwendet werden, sodass sie einen Nebeneffekt beinhalten koennen, z.B. als Dateiname, oder im Rahmen von SQL-Statements, wobei da auch i.d.R. $dbh->quote(...) reicht. Oder wenn du deine Daten in einer Textdatei abspeicherst, kann z.B. auch schon ein Zeilenumbruch gefaehrlich sein...

Wenn der Code im Rahmen einer HTML-Seite ausgegeben werden soll, dann musst du dafuer sorgen, dass er nicht den Rest der Seite beeinflussen kann (z.B. </table> oder so; wenn du HTML-Tags zulassen willst, musst du sie sehr sorgfaeltig pruefen (z.B. auf paarweises vorkommen CPAN:Regexp::Commpn -> Balanced)\n\n

<!--EDIT|Strat|1085348198-->
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pktm
 2004-05-24 12:44
#2499 #2499
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
<<EOF zum Beipspiel.
Gibs mal an dein Script weiter-
Oder  /  und solche Sachen. # hrhr, hier sollte _ _ LINE _ _ / _ _ DATA _ _ stehen , nur halt ohne Leerzeichen. Wurde aber substituiert (absichtlich?)
Du würdest nichts davon Quoten, weil Großbuchstaben und Unterstriche ganz normale Sachen sind.\n\n

<!--EDIT|pktm|1085388376-->
http://www.intergastro-service.de (mein erstes CMS :) )
tomlong
 2004-05-24 17:29
#2500 #2500
User since
2003-08-04
93 Artikel
BenutzerIn
[default_avatar]
[quote=Troll,23.05.2004, 22:32]Leute - irgenwie versteht Ihr mich nicht ...
Ich benötige keine Hinweise wie 'gefährlicher' Code negiert werden kann; ich benötige nur Beispiele von 'gefährlichem' Code damit ich diesen Code negieren kann.[/quote]
schau dir mal meine Links n büschen genauer an :-)

dort wird genau geschrieben, dass Zeichen, die eine Anweisung beenden, wie z.B. ';' oder '&&' ein Risiko bewirken, konkrete Beispiele stehen übrigens dabei ... wenn sie z.B. in einem open() verwendet werden, ... sogar die komplette Arbeitsweise von open() wird auf einer der Seiten beschriebn und kann gut nachvollzogen werden.

Ansonsten gibt es 1 Mio Wege Scripte zu knacken bzw. auszunutzen, weil es gerade in Perl auch 1 Mio Wege gibt ein Script zu coden; man muss halt nur die Sicherheitslücken finden, welche auch von verwendeten Modulen abhängen, daher wirste wahrscheinlich nie eine Liste mit allem "gefährlichem Code" finden, sondern nur Hinweise und Beispiele wie du diesen vermeidest.

Ich z.B. muss gerade ein Mailmodul absichern, wobei ich alle Zeichen bis auf Buchstaben, Zahlen, Whitespaces, sowie -@,:. escape, die Emailadresse auf korrektes Format überprüfe und als letztes den Referrer überprüfe, um Spammer auszuschließen :-) da ich auch MIME::Lite verwende kann ich mir jetzt eigentlich sicher sein, dass man mit meinem Script nix mehr anstellen kann.... hoffe ich doch  :D   :0\n\n

<!--EDIT|renee|1090847344-->
Live long and prosper!
42;
Gast Gast
 2004-05-25 19:21
#2501 #2501
[quote=esskar,23.05.2004, 23:14]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
my %subst = (
      q|&| => q|&amp;|,
      q|"| => q|&quot;|,
      q|<| => q|&lt;|,
      q|>| => q|&gt;|,
      q|'| => q|&'|,
      q|`| => q|&`|,    
  );
 
$$data =~ s/($_)/$subst{$1}/sg foreach keys %subst;


ist gefährlicher code! :)
wenn du pech hast, und
q|&| => q|&amp;| schlägt als letztes bzw. nicht als erstes zu, dann sitzt du ganz schön in der tinte![/quote]
Danke für den Hinweis esskar.
Das wäre mir wahrscheinlich niemals aufgefallen - manchmal hat man eben ein Brett vor'm Kopf ...
Ist natürlich klar daß ein Hash in willkürlicher Reihenfolge auftaucht.

So sollte es aber dann doch funtionieren:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
sub disable_html {
   my $self = shift;
   my $data = shift || return 0;
   local $_;
   
   my @subst = (
       [q|&| => q|&amp;|],
       [q|"| => q|&quot;|],
       [q|<| => q|&lt;|],
       [q|>| => q|&gt;|],
       [q|'| => q|&'|],
       [q|`| => q|&`|],
   );
   
   $data =~ s/($subst[$_]->[0])/$subst[$_]->[1]/osg for 0 .. $#subst;
   return $data;
}
<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten



View all threads created 2004-05-22 18:01.