Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re: Using exec() for executing shell scripts in CGI

by jarich (Curate)
on Dec 14, 2006 at 12:17 UTC ( #589805=note: print w/replies, xml ) Need Help??


in reply to Using exec() for executing shell scripts in CGI

I think your solution may be verging on over-kill. You should be able to achieve the same effect with a direct call to system() or exec():

my %commands = ( opt1 => "exe1", opt2 => "exe2", opt3 => "exe3", ); my $runmode = $cgi->param("runmode"); if(exists $commands{$runmode} ) { system( $commands{$runmode}, $arg1, $arg2 ); if($?) { handle_error(); } } else { handle_error(); # invalid $runmode }

If you don't need to wait until the program returns, then replace system with exec.

The important thing to be aware of here is that calls to system()/exec() make your code unportable. If you're trying to remove a file, make a directory, run "find", get a directory listing or other things like that, then you should be using Perl's built ins or appropriate modules (for example unlink, mkdir or File::Path, File::Find, opendir and readdir or glob).

As far as security goes, you need to consider the following things:

  • Where you pass data from the web (for example the arguments) is that data properly untainted? (Can you think of any data options which will make it do the wrong thing?)
  • Can your executables survive being called out of order, or having multiple invocations running at the same time? (What happens if I hit reload 10 times? Or if I start something before you do?)
  • Is there a better way to achieve the same effect?

I hope this helps.

jarich

Update Sorry I should have been checking $? not $@ in my second if statement.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://589805]
help
Chatterbox?
[perldigious]: Also coincidentally, I'm currently in the middle of a winter storm that has dropped 1 foot of snow and is expected to drop another. I might have to adapt this for customers/vendors who come visit and put it at the beggining of every presentation I give.
[Discipulus]: the photo was removed... Cyrano de Berjerac was not of the same idea..
[stevieb]: perldigious: video near our hq in Montreal. Here in Calgary, it's -28c... we've only got 3" of snow so far, but there are several feet in the mountains already
[perldigious]: Snowshoeing time stevieb? I need to buy a pair so I can walk my German Shepherd properly through the country.
[stevieb]: yeah, I snowshoe a fair amount in the mountains. I also use spikes similar to these very often as well
[perldigious]: Discipulus: alternate link

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (11)
As of 2016-12-06 16:30 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    On a regular basis, I'm most likely to spy upon:













    Results (112 votes). Check out past polls.