I prefer this form (it is a little faster, a little shorter and lets you add more args at the cost of a , and the $arg_name).
my( $username, $user ) = @ARGV;
The multi-arg form of system offers some protection from hacking but remember you are passing $username and $user to the SHELL so it is a good idea to make sure that they only contain non shell chars. Typically you remove everything except your allowed list (it is better to specify what you will allow than try to think of everything bad - you will miss stuff):
$var = ";rm -rf /*;"; my $ILLEGAL_CHARS = qr/[^A-Za-z0-9._-]/; $var =~ s/$ILLEGAL_CHARS/_/g; print $var;
If you were using the single arg form of system and allowed that string (un-sanitized) it would try to execute that command.....
cheers
tachyon
s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print
In reply to Re: Re: relaying arguments using system call
by tachyon
in thread relaying arguments using system call
by jonnyfolk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |