Estoy de acuerdo en que es difícil protegerse contra un ataque cuando estás invitando a posibles atacantes con una forma de cargar archivos en tu servidor. El mejor consejo que puedo dar es utilizar múltiples enfoques para asegurar el contenido cargado.
Asegúrese de que el nombre de archivo que se envía esté limpio. Por ejemplo, no desea que alguien envíe '/../../index.html' como nombre de archivo y sobrescriba su página de índice.
Los nombres de archivo también deben verificarse para un tipo y extensión de mimo válidos (.jpg, .gif), sin embargo, también vale la pena investigar si su idioma de elección tiene alguna vulnerabilidad potencial cuando se trata de nombres de archivo, por ejemplo, cuando se trata de PHP a veces es posible pasar un byte nulo que puede pasar por alto las restricciones de extensión.
Al elegir un nombre de archivo personalizado para el contenido cargado, puede mitigar el riesgo de nombres de archivos maliciosos. Entonces, si acepta un tipo mime de 'imagen / jpeg', escríbalo en un archivo con un nombre de archivo de '[RANDOMSTRING] .jpg'.
Como comentó woliveirajr, verificar los bytes mágicos también puede ser una buena idea, sin embargo, no hay nada que impida que alguien cargue un script php backdoor que contenga algunos bytes mágicos, y luego continúe con el código <% php.
Una vez que esté satisfecho de haber asegurado su script de carga, verifique si su servidor web tiene una opción de configuración para deshabilitar la ejecución de scripts en su directorio de destino (como permisos de ejecución IIS ). Esto significaría que incluso si alguien puede omitir su lista blanca de carga, les resultará difícil tener un script para ejecutar en su servidor.
También tenga en cuenta los ataques que no están directamente relacionados con la ejecución del código en su servidor. He visto innumerables veces que las cargas de archivos están protegidas contra la ejecución del lado del servidor, sin embargo, la carga de un nombre de archivo de "..." da como resultado un ataque XSS.
Esta no es de ninguna manera una lista extensa, pero espero que te dé algunas ideas de las diferentes áreas en las que deberías protegerte.