Se você usa Laravel, você pode primeiro restringir o tipo de arquivo pelo Form Request.
Ele faz uma verificação antes de entrar no método do controller. Aí você ainda pode criar uma trait ou classe que faça mais verificações se a imagem é válida etc. Agora, se você está fazendo um projeto em PHP e não é com Laravel, não sei em que mundo você está vivendo rsrsrsrsr.
Outras questões... Seria tipo um Google Drive? Se sim, por que alguém contrataria ele e não o renomado/famigerado Google?
Outra, imagem é um negócio que ocupa bastante espaço, mesmo otimizando para webp e redimensionando. Como que será cobrado? Vai cobrar por número de imagens ou espaço em disco? É mensal ou uma vez apenas?
Talvez, dependendo da ideia do seu projeto, consumir uma api de algum storage e salvar apenas o token do cliente e ele pagar o espaço direto pro storage conforme ele usa... Quem sabe essas perguntas te acenda uma lâmpada na cabeça e surja uma melhoria aí.