perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 17
Click for quality!




11.02.2012 / 07:30

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragDateibame mit param() an qx() übergeben
Seitenanfang
Hallo!

Ich habe ein (für mich) seltsames Problem: Ich möchte einen Dateinamen per URL an ein CGI-Skript übergeben, welches damit ein externes Programm aufrufen soll. Das habe ich so gelöst:

-----------------------------------------------
use CGI qw/:standard/;

$filename = param('filename');

@systemargs = ("$programm","$filename");

$out = qx(@systemargs) or die "Can't open $programm: $!";
-----------------------------------------------

Aufgerufen habe ich das Skript mit http://localhost/cgi-bin/meinscript.cgi?filename=datei.doc

Nun das Problem: Das Programm $programm meckert, dass es die Datei datei.doc nicht öffnen kann und bricht ab.

Setze ich jedoch den Dateinamen mit

$filename = "datei.doc";

direkt im Skript funktioniert alles einwandfrei.

Wo liegt denn der Unterschied im Setzen der Variablen über die URL und direkt im Skript?

Danke im vorraus!
Michael

Datum: 29.09.2009-21:54

Beitragre: Dateibame mit param() an qx() übergeben
Seitenanfang
Gib doch mal aus, was in $filename nach $filename = param('filename'); drin steht, eventuell siehst du einen Unterschied.

Benutze außerdem strict und warnings, damit andere Fehlerquellen ausgeschlossen werden können.

Beispiel (ungetestet):

-----------------------------------------------
use strict;
use warnings;
use CGI;

my $q = CGI->new();
my $filename = $q->param('filename');

# Fehler, wenn filename gar nicht angegeben wurde.
die("Missing filename.") unless $filename;

my $programm = "welches Programm startest du eigentlich?";
my @systemargs = ($programm, $filename);

my $out = qx(@systemargs) or die("Can't open $programm: $!");
-----------------------------------------------

Datum: 30.09.2009-21:01

Beitragre: Dateibame mit param() an qx() übergeben
Seitenanfang
Danke für Deine Hinweise. Mittlerweile habe ich mir ein kleines Test-Html-Formular gebastelt und siehe da: es funktioniert einwandfrei (sowohl mit GET als auch POST).

Warum es nicht ging, als ich die Parameter direkt an die URL im Browser angehängt hatte, weiß ich nicht. Einen Rechtschreibfehler kann ich definitiv ausschließen (wie immer ;-)

Trotzdem Danke,
Michael

Datum: 01.10.2009-22:20

Beitragre: Dateibame mit param() an qx() übergeben
Seitenanfang
Du solltest Benutzereingabe, also zum Beispiel deine CGI-Parameter, auf keinen Fall ungeprueft an system(), exec() bzw. `` und qx// uebergeben.
Zum einen solltest du einschraenken welche Dateiepfade als Parameter uebergeben werden duerfen und zusaetzlich ueberpruefen ob der uebergebene Pfad auch eine existierende Datei ist.
Die groesste Gefahr ist dass ein Angreifer ueber einen entsprechend konstruierten Pfad weitere (beliebige) Kommandos ausfuehren kann.

Die beste Moeglichkeit entsprechende Hinweise fuer ungepruefte Eingaben zu bekommen ist die Aktivierung der Tainting-Checks bei Angabe der -T Option in der Shebang.

#!/usr/bin/perl -T

Datum: 03.10.2009-15:12

Beitragre: Dateibame mit param() an qx() übergeben
Seitenanfang
Danke, asphalt, für die Hinweise. Ich hatte das hier eingestellte Beispiel auf das Wesentliche gekürzt, um hier nicht unnötig viel Code einzustellen.

Grüße,
Michael

Datum: 03.10.2009-16:58

-






-
-