system() unter Windows generell mit Shell?

10/11/2010 - 08:28 von Manuel Reimer | Report spam
Hallo,

ich kenne das von Unix so, dass es hàufig sinnvoll ist, aus
Sicherheitsgründen bewusst darauf zu verzichten, dass ein externes
Programm via Shell aufgerufen wird. So kann man sicher sein, dass der
String, den man an ein Programm übergeben will, nur am Programm landet
und nicht von einer Shell interpretiert wird.

Dies trifft aber scheinbar nicht immer so zu. Folgendes Testscript:

| #!/usr/bin/perl
| system("zip", "-9", "test.zip", "*");

Ausgeführt unter Unix:

| $ ./test.pl
| zip warning: name not matched: *
|
| zip error: Nothing to do! (test.zip)

Ausgeführt unter Windows:

| C:\test>test.pl
| adding: test.txt (stored 0%)

Kann ich also davon ausgehen, dass unter Windows auch ein auf Parameter
aufgeschlüsseltes "system" generell an einer Shell landet? Wie kann man
das umgehen? Ist dieses Verhalten irgendwo dokumentiert?

Gruß

Manuel

"Alle Macht geht vom Volk aus - aber wo geht sie hin?" - Bertolt Brecht
Alle wollen zurück zur Natur - aber keiner zu Fuß
Beitràge mit *X-No-Html Header* kann ich weder lesen, noch beantworten!
 

Lesen sie die antworten

#1 Wolf Behrenhoff
11/11/2010 - 11:59 | Warnen spam
On 10.11.2010 08:28, Manuel Reimer wrote:
Hallo,

ich kenne das von Unix so, dass es hàufig sinnvoll ist, aus
Sicherheitsgründen bewusst darauf zu verzichten, dass ein externes
Programm via Shell aufgerufen wird. So kann man sicher sein, dass der
String, den man an ein Programm übergeben will, nur am Programm landet
und nicht von einer Shell interpretiert wird.

Dies trifft aber scheinbar nicht immer so zu. Folgendes Testscript:

| #!/usr/bin/perl
| system("zip", "-9", "test.zip", "*");

Ausgeführt unter Windows:

| C:\test>test.pl
| adding: test.txt (stored 0%)

Kann ich also davon ausgehen, dass unter Windows auch ein auf Parameter
aufgeschlüsseltes "system" generell an einer Shell landet? Wie kann man
das umgehen? Ist dieses Verhalten irgendwo dokumentiert?



Hallo Manuel,

ich habe leider kein Windows zur Hand, meine mich aber zu erinnern, dass
unter Windows die Shell selbst nicht mit * rumspielt.

Was sagt eigentlich
C:\>perl -E"say qq(parameter $_) for @ARGV" -- 1 2 3 *

Kommt da der * oder die Dateinamen?

Wolf

Ähnliche fragen