Puedes subir todo tipo de archivo .. las restrincciones las pondrás tu si lo deseas en tu programación.
La seguridad la consigues entre otras cosas por ejemplo usando los arrays superglobales $_FILES en lugar de asumir los archivos que subes como globales (de hecho nació $_FILES para solventar esee problema de seguridad que surgió hace ya unas cuantas versiones de PHP atras a las actuales ..)
El tamaño máximo del archivos lo delimita PHP y tu servidor HTTP que uses como "máximo" .. luego tu podrás limitar si lo deseas el archivo con otras técnicas.
Todo esto lo detalla el manual oficial de PHP en su apartado "Upload":
http://www.php.net/manual/en/features.file-upload.php
Un saludo,