Schrift
[thread]11623[/thread]

Datei verschieben im Taint-Modus?



<< |< 1 2 >| >> 11 Einträge, 2 Seiten
SinaMeiyer
 2008-04-11 23:49
#108234 #108234
User since
2008-01-17
11 Artikel
BenutzerIn
[default_avatar]
Hey Leute,

habe mal wieder ein Problem ...
und zwar bekomme ich es nicht hin, im Taint-Modus eine Datei aus dem /cgi-bin Verzeichnis rauszuschieben oder zu kopieren?

Habe es mit "File::Copy" und mit "rename()" versucht, bekomme es aber nicht hin?
mmm ... ?
Weiss vieleicht jemand wie ich aus dem /cgi-bin Verzeichnis Dateien in das /httpdocs Verzeichnis - im Taint-Modus, verschieben kann?

Hab auch schon nachgesehen aber nix gefunden?


LG Sina
betterworld
 2008-04-12 00:00
#108237 #108237
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Gibt es eine Fehlermeldung? (Vielleicht in $!)
Geht es ohne Taint-Modus? Dann koennte es daran liegen, dass Du die Dateinamen nicht ausreichend ueberprueft hast. Wenn es relative Pfade sind, musst Du auch noch das Arbeitsverzeichnis pruefen, glaube ich. (Update: muss man offenbar doch nicht, hab's ausprobiert.)
RalphFFM
 2008-04-12 00:01
#108238 #108238
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hat der "User" unter dem der Webserver läuft Schreibrechte auf /httpdocs Verzeichnis?
Wie übergibst Du den Dateinamen? -> Code bitte.
SinaMeiyer
 2008-04-12 00:23
#108239 #108239
User since
2008-01-17
11 Artikel
BenutzerIn
[default_avatar]
Hallo Jungs!

Das ist die Fehlermeldung:
Insecure dependency in rename while running with -T switch at rename.cgi line 13.

Und das ist mal schnell das Beispielscript:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl -w -T
use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;

my $cgi = CGI->new;
print $cgi->header;

my $root = $ENV{'DOCUMENT_ROOT'};
my $datei = "test.txt";
my $new = "$root/test/newtest.txt";

rename("$datei", "$new") or die $!;

if (-e $new) {
print "Ist angekommen!\n";
} else {
print "Nicht angekommen?\n"
}
exit;


Also ohne -T funktioniert das eigentlich, nur mit nicht?


LG Sina
RalphFFM
 2008-04-12 00:28
#108240 #108240
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
Das simple $root = $ENV{'DOCUMENT_ROOT'} macht es unsicher.
Das $root verwendest Du anschließend als Pfadbestandteil.
RalphFFM
 2008-04-12 00:44
#108241 #108241
User since
2006-11-16
258 Artikel
BenutzerIn
[Homepage] [default_avatar]
ungetestet und bleistiftweise so:

$root = $ENV{'DOCUMENT_ROOT'};
$root =~ /^([\w/]*)$/; # <- Ausdruck musst Du anpassen an Deine Umgebung
$root = $1 or die ...;
...
SinaMeiyer
 2008-04-12 00:47
#108242 #108242
User since
2008-01-17
11 Artikel
BenutzerIn
[default_avatar]
Hallo RalphFFM,

also wenn ich den Pfad selber ausschreibe funktioniert es.
Dann hat das also immer an, "$root = $ENV{'DOCUMENT_ROOT'}" gelegen,
da wär ich nie drauf gekommen ...

Danke für Deine Hilfe :-)

//Edit
$root =~ /^([\w/]*)$/;
Danke, das versuch ich jetzt auch noch mal ... :-)



LG Sina
betterworld
 2008-04-12 00:49
#108243 #108243
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
RalphFFM+2008-04-11 22:44:48--
ungetestet und bleistiftweise so:

$root = $ENV{'DOCUMENT_ROOT'};
$root =~ /^([\w/]*)$/; # <- Ausdruck musst Du anpassen an Deine Umgebung
$root = $1 or die ...;
...

Das "or die" sollte man hier eher anders plazieren. Wenn der Ausdruck nicht matcht, haengt $1 davon ab, was der letzte erfolgreiche Match ergeben hat... Aber ich denk mal, Sina koennte auch selbst den Fehler beheben jetzt.

Andererseits finde ich es auch irgendwie schwachsinnig, dass solchen Umgebungsvariablen nicht getraut wird, jedenfalls bei einem CGI-Script. Es ist natuerlich zu viel verlangt vom Taint-Modus, den Unterschied zwischen $ENV{DOCUMENT_ROOT} und $ENV{PATH_INFO} zu kennen (das eine ist recht vertrauenswuerdig, das andere nicht). Aber dass man solche Sachen immer alle pruefen muss, macht den Code nur ziemlich unuebersichtlich, daher benutze ich -T auch eher selten.
SinaMeiyer
 2008-04-12 01:03
#108244 #108244
User since
2008-01-17
11 Artikel
BenutzerIn
[default_avatar]
Hallo betterworld,

funktioniert jetzt alles, danke :-)


LG Sina
sid burn
 2008-04-12 20:43
#108282 #108282
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
betterworld+2008-04-11 22:49:56--
Andererseits finde ich es auch irgendwie schwachsinnig, dass solchen Umgebungsvariablen nicht getraut wird, jedenfalls bei einem CGI-Script. Es ist natuerlich zu viel verlangt vom Taint-Modus, den Unterschied zwischen $ENV{DOCUMENT_ROOT} und $ENV{PATH_INFO} zu kennen (das eine ist recht vertrauenswuerdig, das andere nicht). Aber dass man solche Sachen immer alle pruefen muss, macht den Code nur ziemlich unuebersichtlich, daher benutze ich -T auch eher selten.

Der Taint Modus ist nicht nur dafür gedacht um web Anwendungen eine Sicherheit zu geben. Sondern generell Programmen eine Sicherheit zu geben.

Wenn du ein Shell Skript schreibst und das benutzt $ENV{DOCUMENT_ROOT} dann ist es eben nicht sicher. Jeder kann z.B. unter der bash vorher mit "expoer DOCUMENT_ROOT=bla" den Pfad anders setzen.

Und wenn dein Skript noch mit Root Rechten läuft und von einem unpriviligierten Benutzer ausgeführt werden kann, hast du den Salat. Von daher ist es schon korrekt das %ENV komplett als unsicher eingestuft wird.

Quote
Aber dass man solche Sachen immer alle pruefen muss, macht den Code nur ziemlich unuebersichtlich, daher benutze ich -T auch eher selten.

Etwas zu überprüfen, Fehler abfangen etc. kostet immer Code den man schreiben muss. Ob es unübersichtlich wird hängt von deiner Programmierung ab. ;)

Ein Grund das man jegliche Überprüfung sein lassen sollte ist das aber nicht. Das ist einfach nur Faulheit. Schlechte Faulheit...
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
<< |< 1 2 >| >> 11 Einträge, 2 Seiten



View all threads created 2008-04-11 23:49.