Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]261[/thread]

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

Leser: 1


<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten
Gast Gast
 2004-05-25 19:24
#2502 #2502
[quote=pktm,24.05.2004, 10:44]<<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.[/quote]
<<EOF wird negiert weil '<' umgewandelt wird, den Rest verstehe ich jetzt nicht so richtig ...
Gast Gast
 2004-05-25 19:34
#2503 #2503
[quote=Strat,23.05.2004, 23:35]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)[/quote]
Die Formulardaten werden größtenteils als Dateien gespeichert und bei Bedarf wieder ausgelesen; teilweise nach dem Auslesen ergänzt/geändert und wieder zurückgeschrieben.
Ein nicht unerheblicher Teil der Formulardaten wird via Browser zurückgeliefert; entweder mit den ursprünglichen oder mit den durch das Programm modifizierten Werten.
Jedes Formularfeld wird auf Gültigkeit (im Sinne der Weiterverwendung) geprüft - ungültige Eingabe führt zu einer Fehlermeldung und zu einem Programmabbruch.
esskar
 2004-05-26 05:25
#2504 #2504
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ist zwar auch kein Beispiel für "gefährliche usereingaben",
aber CGI::Untaint (entdeckt bei: The 2003 Perl Advent Calendar) ist Klasse, um Usereingaben zu prüfen!
Gast Gast
 2004-05-26 17:53
#2505 #2505
@esskar
Jau - sieht gut aus :)
ist aber leider auf keinem Webserver installiert.
Wenn ich also CGI-Programme schreibe die auch von anderen Leuten auf anderen Servern installiert werden, dann muß ich mich ganz schlicht auf die Standard-Distribution stützen.
esskar
 2004-05-26 17:59
#2506 #2506
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
schon mal von
FindLib etcpp. gehört?
Gast Gast
 2004-05-26 19:04
#2507 #2507
[quote=esskar,26.05.2004, 15:59]schon mal von
FindLib etcpp. gehört?[/quote]
Nein - kenn ich leider nicht :(
Aber Du willst mir damit ja auch sicher nicht sagen dass 'FindLib' auf jedem beliebigen Server jedes beliebige Modul installiert und/oder zur Nutzung bereitstellt ;)
esskar
 2004-05-26 19:14
#2508 #2508
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
nein, will ich nicht; aber PP Module kannst du einfach kopieren...

also zum Bsp. in den Ordner libs in deinem Homepage Verzeichnis...

Code: (dl )
1
2
3
4
5
6
7
8
libs/Exporter/Lite.pm
libs/UNIVERSAL/exports.pm
libs/UNIVERSAL/require.pm
libs/CGI/Untaint.pm
libs/CGI/Untaint/hex.pm
libs/CGI/Untaint/integer.pm
libs/CGI/Untaint/object.pm
libs/CGI/Untaint/printable.pm


und dann in deinem Script

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl

BEGIN {
  use FindBin;
  use lib ("$FindBin::Bin", "$FindBin::Bin/libs");
  $ENV{TMPDIR} = $ENV{TEMP} || "";
};
delete @ENV{qw(IFS CDPATH ENV BASH_ENV)}; # Make %ENV safer =:-)

use strict;
use warnings;

use CGI::Untaint;
...


und FindBin ist im standard enthalten!\n\n

<!--EDIT|esskar|1085584534-->
pktm
 2004-05-26 20:44
#2509 #2509
User since
2003-08-07
2921 Artikel
BenutzerIn
[Homepage]
user image
Das mit DATA ist in etwa das Selbe wie <<EOF
LINE gibt nur die aktuelle Zeile im Script aus.
Das kann bei CGIs dazu führen, dass was vor dem Header ausgegeben wird.
Hier im Forum wurden die Dinger einfach gekürzt.
mfg pktm
http://www.intergastro-service.de (mein erstes CMS :) )
Gast Gast
 2004-05-27 17:47
#2510 #2510
[quote=pktm,24.05.2004, 10:44]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.[/quote]
Was ich nicht verstanden habe ist der Text und der Kontext ...
pq
 2004-06-02 14:37
#2511 #2511
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Troll,25.05.2004, 17:21]
Code: (dl )
1
2
3
4
5
6
7
8
9
    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;
[/quote]
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;
\n\n

<!--EDIT|renee|1090847427-->
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
<< |< 1 2 3 4 >| >> 39 Einträge, 4 Seiten



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