This is something I have been looking at for a while, and unfortunately there is no easy solution.
You cannot rely on the browser sending any header information because it may not know about the type it is trying to upload, or it may just not decide to send any mime headers with the file and class it as a generic type.
Macs (euuurgghhh) add to that since they decide to drop the idea of extensions and instead can actually store extra information in the file to determine the file type if no extension is used (this caused me nightmares with one of my clients, trying to convince him that images were better off with jpeg or gif extensions).
The simplest way is to rely on the file extension given, and enforce Macs (euuurgghhh) to adhere to it, if no extension is given then don't accept the file.
The other alternative is to play around with mime-type detection at the server side which is something which I was going to start doing. You should find a file called "magic" on your linux box somewhere - probably in the apache conf directory - (assuming you are running under linux) which contains a list of mime types and bit patterns which you can use to match against files and determine their types. Again, this depends on the fact that the "magic" file lists the files you are interested in, and i am sure that this would also be a fairly lengthy process to determine correct file typing.
Additionally, the Mac (euuurgghhh) isn't going to help matters since (as i said before) it can physically alter files where an extension is not present to store its own information about the associated application and this may mess up the bit patterns you are trying to search for. Either way - it's going to be a fun task.
Hope this helps you