1. it uses backticks instead of `system()` with a list of arguments in order to collect output 2. it uses the same filenames as the ones uploaded (I'm guessing it makes more sense to interpret) 3. only removes slashes from the filename The above means that a file named `foo $(do something bad).xls` will do something bad. Limited to what the user that runs the cgi script can do.