[Vienna-pm] Escapen von Shellparametern
Josef Schmid
e9427749 at stud4.tuwien.ac.at
Mon Apr 28 11:18:56 PDT 2008
Stefan Weiss schrieb:
> On 2008-04-28 18:20, Josef Schmid wrote:
>> 1) Hmm, ich würde es als Array system() oder open() übergeben,
>
> [...]open(): Das war mir noch gar nicht bekannt, dass das überhaupt
> unterstützt wird. Das könnte eine wirklich interessante Lösung sein. Ist
> das ein neueres Feature?
ich glaub ab 5.6 (oder ab 5.8?)
my $result=do {
open(my $fh,'-|','faxjob','--from',$from,'--faxnum',$num,...) or die;
local $/; <$fh>
};
>> 2) quotemeta ist für RE gedacht, müsste man sich durchdenken.
>> ala ´´ etc. Adererseits alles mit '' einschliessen, dann
>> reicht vielleicht schon "'" => "\'"
Ok quotemeta scheint sehr grosszügig mit '\' zu sein.
Aber auf charset muss man dann trotzdem noch aufpassen.
Da manche Kodierungen aus mehreren Bytes bestehen, wenn
sich da beide Seiten ¬ einig sind.
...
>
> Zeichen in quoted-Strings zu escapen (gerade ' und ") ist in der Bash
> umständlicher als ohne Quotes. Probier mal
> echo 'foo\'bar'
> (und dann echo 'foo'"'"'bar')
Dafür scheint's das einzige zu sein, was man 'quoten' muss,
und sub qesc($){ (my $t=shift)=~s{'}{'\\''}g; "'$t'" }
ist auch wieder ¬ so kompliziert.
Allerdings was ist wenn's dann eine andere Shell ist...
>> 3) Offensichtlich handelt es sich bei $from und $num
>> um speziellere Datentypen, deshalb sollte auch eingeschränkter
>> geprüft werden: z.B. $num nur erlaubt wenn !/\D/
>> Möglicherweise gefällt Dir eins der unzähligen Validierungs-
>> module auf CPAN.
>
> Das funktioniert nur für einfache Parameter. Was ich validieren kann,
> habe ich validiert. Sobald man aber einen user-definierten Textinhalt
> mitgeben möchte, muss man trotzdem richtig escapen.
Oder per IO übergeben ala -from-file - oder -from-file /dev/fd/3.
Oder 'named pipes'
Insbesondere da man wenn man komplette zu faxende Texte angibt,
riskiert irgendwann Bekanntschaft mit der maximalen Befehlszeilen-
länge zu machen.
Gibt's auch einiges auf CPAN. Halte nach IPC::* Ausschau.
>> 4) wenn schon unsicher, dann so dass man jemand anderen die
>> Schuld zuschieben kann. ;-)
>> use Shell;
>
> Auch interessant, habe ich auch noch nicht gekannt. Lohnt sich ja doch,
> zur Sicherheit auf der vienna.pm Liste nachzufragen =)
>
> Wobei mich die Manpage von Shell.pm ein bißchen abschreckt:
>
> | This package is included as a show case, illustrating a few Perl
> | features. It shouldn’t be used for production programs.[¹]
>
> Ich nehme an, es wird schon richtig funktionieren, aber wenn nicht, und
> jemand diese Passage liest, bekomm erst recht wieder ich eine auf den
> Deckel :-)
that's life,
Josef
ad 1) Ach würd ich ¬ so eng sehen, ist doch eh Standardtext so ziemlich
jeder Lizenz ;-)
btw&ps: für alles was ich so von mir gegeben hab & geb, gilt:
| This is included as a show case, illustrating a few Perl
| features. It shouldn’t be used for production programs.[¹]
More information about the Vienna-pm
mailing list