http://www.perlmonks.org?node_id=125485


in reply to perl -s is evil?

Yes, -s is very bad, but I hadn't realized just how bad until you posted this.... Among the many globals that I could tweak with -s were $< $> $) and $( which should raise a huge security flag for anyone whos read perlvar. For instance, when saved as evildashs.pl, and envoked as:

% ./evildashs.pl -\<=0 -\>=0 -\(=0 -\)=0

The following code might raise some eyebrows....

#! /usr/bin/perl -wsT use strict; print "\$) = ", $), "\n"; print "\$( = ", $(, "\n"; print "\$< = ", $<, "\n"; print "\$> = ", $>, "\n"; __END__ =head1 OUTPUT $) = 0 $( = 0 $< = 0 $> = 0
I don't think this actually gives the process any new powers, but it would allow someone to execute code that was only supposed to be invoked as root.

Oh, right. I should include the obligatory link to Getopt::Std and Getopt::Long for a much better way to handle command line options.

-Blake

Replies are listed 'Best First'.
Re: Re: perl -s is evil?
by belg4mit (Prior) on Nov 15, 2001 at 21:28 UTC
    Of course Getopt::* isn't actually a solution either. One could simply do perl -s ./IUseGetOptToAvoidEvilDashes.pl -\<=0 -\>=0 -\(=0 -\)=0

    But I agree it is disconcerting, though I wouldn't go so far as to call -s evil.

    -- perl -p -e "s/(?:\w);(<A HREF="/index.pl?node=st&lastnode_id=2437">st< +/A>)/'\$1/mg"