in reply to Re^4: Question using system.
in thread Question using system.

It wasn't required for that particular command, but it avoids the need for shell quoting.

# XXX Buggy and susceptible to injection attacks. open(my $cmd, "getfilesdata $file |") # Fixed open(my $cmd, '-|', 'getfilesdata', $file)

Replies are listed 'Best First'.
Re^6: Question using system.
by oko1 (Deacon) on Jul 10, 2008 at 21:52 UTC

    Sorry, I'm still unclear. I can see the 'buggy' part - e.g., specifying a "filename" containing odd characters which would cause Perl to barf on syntax - but injection attacks? Searching the Web doesn't come up with anything other than SQL injection attacks.

    
    -- 
    Human history becomes more and more a race between education and catastrophe. -- HG Wells
    

      An injection attack occurs when data is treated as code, possibly due to improper escaping.
      It can occur in SQL statements.
      It can occur in shell command lines.
      It can occur in evaled strings.
      It can occur in HTML (known as Cross-Site Scripting)
      etc.

      What if $file holds "| rm -rf /"? It's even a perfectly valid path, so it's not a validation issue.

      Update: Added links. Refined definition.

        I guess the assumption here is that the script is executing with higher privs than the user supplying the arguments? If that's the case, then that's what I was missing. Otherwise, there's nothing to stop the user from just typing "rm -rf /".

        In any case, thank you kindly for the explanation. Much appreciated.

        
        -- 
        Human history becomes more and more a race between education and catastrophe. -- HG Wells