In the backend, limit image size to say 50mb, the number of images a user can upload to 1k and the amount of users that can be signed up to 10k. Then you have some numbers which will let you say "regardless of what happens, I've got a hard cap of 1 TB of stored data".
You don't have to show the user their usage and you can always lift the caps with a deployment. What you don't want to happen is a side-project costs you tens of thousands because one fool thought it was funny to upload a million hi-res pictures of Rick Astley while you were asleep.
Slightly more work would be to limit the number of images that a user can upload in 15 minutes. Or depending on what your signup flow is making a user confirm their email but putting a short delay in sending the email out.
Good reminder to set usage caps with a deployment
Bot Protection: https://github.com/growlfm/ipcat
GeoIP Evaluation: https://dev.maxmind.com/geoip/geolite2-free-geolocation-data...
You can dig deeper using dedicated services for URL and image inspection.
Image Evaluation: https://cloud.google.com/vision/docs/detecting-safe-search
URL Evaluation: https://cloud.google.com/web-risk/docs/overview
That might be correct, but knowing what moves you intend to make if a problem occurs is wise. For example, suppose you wake up one morning to find that your site was flooded overnight with content that is illegal. If you already had a plan in place for problematic content, you execute the plan, instead of being in a high stress situation and being forced to research and make quick decisions on the fly.
And if I am to have a plan, why not just implement from the start?
Most nefarious attacks on sites/apps are occasional or one-time things. As an example, I used to work on a site that would get DDOSed a few times a year. I'm not sure why we were targeted, but rather than move our entire weird old legacy infrastructure to a vendor who could mitigate DDOS attacks, we had standard actions to take: Call our server dude, roll traffic to the backup data center, id the IPs at fault, add them to our block list, inform partners and customers to let us know if the new IP blocks affected them.
It was an annoyance, but not a disaster. That is the level of preparation you want - enough to just be annoyed when bad things happen, not demolished.
That should not stop you from prevention, either, of course - if you want to be proactive about such things, go for it.
As soon as the people you don’t want to use your system learn about your system, they will try to use your system.