I know this is highly subjective, but given this data what might you consider a reasonable algorithm for identifying a better or worse image.
It sounds like you're probably asking more about how to choose the bounds in the given parameters for acceptable photos, like "sharpness > x", than about what algorithm to use. The algorithm seems pretty straightforward: look at the values for the various parameters and decide whether they indicate that the image is acceptable.
I don't think we can reasonably tell you what the bounds on those parameters should be. We don't know what you would consider acceptable. Instead, pick some number of images from your collection and ask the relevant stakeholders in your project to rate them as acceptable or unacceptable. Further, have them indicate which parameters the unacceptable images fail in: sharpness, contrast, brightness, or color. Then analyze the data: were all images marked unacceptable for sharpness below some threshold? This is how you establish bounds for sharpness. Repeat for the other parameters.
I think you could use this system to reject user-submitted images that fall outside the acceptable range for the given parameters, but you'll probably still want a human to review each photo to make sure the the content is appropriate.