Oddly enough, I think if you are asking purely from a security perspective, I'd say that using global variables to pass data to functions is best.
"Woah! Are you mental?" I hear you ask?
It's like the idea of abolishing seatbelts, and instead fixing a sharp, 6 inch spike onto all steering wheels instead. That would change your driving behaviour, no? You'd become the world's safest driver overnight!
So, if you forced yourself to use globals as parameters, you'd make sure your function did as much security checking on that data as possible, as you couldn't be sure your caller had taken care of it.
Of course, like the steering wheel spike, this is an utterly ridiculous suggestion. In the real world, you use function parameters wherever possible: easier to test, easier to read, allows recursive calls, etc... A more OO approach might be to use a class which takes the raw data in its constructor, and puts validated data into its member variables for other class methods to use.
Let the downvotes commence :)