Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
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.


Comment on Re: Using exec() for executing shell scripts in CGI
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://589805]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (9)
As of 2014-11-22 09:06 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My preferred Perl binaries come from:














    Results (120 votes), past polls