Schrift
[thread]261[/thread]

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

Leser: 1


<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten
pq
 2004-06-02 14:45
#2512 #2512
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
zu 'gefährlichem code': wenn du was an system verfütterst,
ist eine eingabe wie 'rm -rf /' gefährlich. wenn du was
an eine datenbank übergibst, ist 'drop table ...' gefährlich.
wenn du html-code escapen willst, ist es ausserdem
besser, HTML::Entities zu benutzen als etwas selbstgebasteltes.
CGI solltest du verwenden, oder ein leichteres CGI-modul,
denn sowas bietet noch mehr möglichkeiten zum schutz,
z.b. die maximale POST-grösse.
die regel ist: traue keinem user-input. wenn du ihn einfach
nur ausgeben willst, ok, aber sobald user-input an andere
programme etc. übergeben wird, ist er gefährlich. wie du
ihn escapen musst, dafür gibt es keine allgemein-regel! (kann
es auch nicht). das ist die aufgabe für dich als programmierer,
das rauszufinden. auf der sicheren seite bist du, wenn du
statt black-lists white-lists verwendest. also nicht fragen: "welche
zeichen sollte ich verbieten?", sondern, "Welche Zeichen
erlaube ich überhaupt?"
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
esskar
 2004-06-03 04:46
#2513 #2513
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=pq,02.06.2004, 12:37]wieso so umständlich?
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|&`|,    
);
my $re = join '|', map quotemeta, keys %subst;
$data =~ s/($re)/$subst{$1}/g;
[/quote]
hat er jetzt nicht das selbe problem, wie oben;
also das z.B. & als letztes ersetzt wird?

wenn nein, warum nicht?\n\n

<!--EDIT|esskar|1086223604-->
Dubu
 2004-06-03 13:10
#2514 #2514
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Nein, weil jetzt alle Ersetzungen parallel durchgefuehrt werden. Und da der ersetzte Text nicht nochmal getestet wird, bleiben alle Ersetzungen erhalten. Abgesehen von diesem Vorteil ist pqs Code auch a) deutlich schneller, weil der Text nur einmal gescannt wird und b) richtiger, weil hinter der Regexp vorher der Modifier /o stand, der da komplett falshc war.
Gast Gast
 2004-06-03 18:27
#2515 #2515
[quote=Dubu,03.06.2004, 11:10]weil hinter der Regexp vorher der Modifier /o stand, der da komplett falshc war.[/quote]
Der Modifier /o ist an dieser Stelle tatsächlich sehr unangebracht - macht aber auch nichts kaputt - außer der Laufzeit ;)
Dubu
 2004-06-04 21:01
#2516 #2516
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Troll,03.06.2004, 16:27]
Der Modifier /o ist an dieser Stelle tatsächlich sehr unangebracht - macht aber auch nichts kaputt - außer der Laufzeit ;)[/quote]
Das sehe ich anders.

Zur Verdeutlichung:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ perl -le 'my $str="0123456789"; for my $x (0 .. 9) { $str =~ s/$x/./g; print $str;}'
.123456789
..23456789
...3456789
....456789
.....56789
......6789
.......789
........89
.........9
..........
$ perl -le 'my $str="0123456789"; for my $x (0 .. 9) { $str =~ s/$x/./og; print $str;}'
.123456789
.123456789
.123456789
.123456789
.123456789
.123456789
.123456789
.123456789
.123456789
.123456789


Und im Fall deines Code, hier zu einem Programm umgebaut:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/perl
use strict;
use warnings;

my $data = q{&"<>'`};

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;

print $data, "\n";

Mit dem /o ergibt sich:
Code: (dl )
&`'gt;lt;quot;amp;"<>'`


Ohne das /o ist es korrekt:
Code: (dl )
&amp;&quot;&lt;&gt;&'&`
\n\n

<!--EDIT|renee|1090847259-->
Gast Gast
 2004-06-04 21:58
#2517 #2517
OK-OK ...
der Modifier /o war ja nun wirklich absoluter Quatsch und ich hab ihn bereits rausgenommen (manchmal wird eben das eine Brett vorm Kopf nur durch ein anderes Brett ersetzt) :)
pktm
 2004-07-20 11:08
#2518 #2518
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Hier gibts noch einen Interessanten Artikel zum Thema Sciherheit und auf was man achten sollte:
http://www.heise.de/security/artikel/38658/0
Das nennt sich cross-site-scripting.
mfg pktm
EDIT: Typo\n\n

<!--EDIT|pktm|1090318484-->
http://www.intergastro-service.de (mein erstes CMS :) )
[E|B]
 2004-07-20 13:14
#2519 #2519
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Interessanter Artikel. Danke dir!
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]
Free Faq
 2004-07-25 17:13
#2520 #2520
User since
2003-09-10
141 Artikel
BenutzerIn
[default_avatar]
Hab vorhin folgenden Link gefunden. Hat zwar nich viel mit Perl zu tun, aber dennoch interessant:
http://www.gaijin.at/manbugs.shtml
Haut mich nicht, ich bin ein Noob!
<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten



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