If I'm supporting the upload of content (mostly images and video) by my REST API's users, is it safe to trust the Content-Type
they declare in (multipart) uploads? Or should I, instead, run some kind of "media type detection" on the content (using, for example, Apache Tika) to ensure that the declared media type corresponds to the detected, actual one? Am I being over-zealous by introducing this media type detection step?
相关问题
- Delete Messages from a Topic in Apache Kafka
- Jackson Deserialization not calling deserialize on
- How to maintain order of key-value in DataFrame sa
- StackExchange API - Deserialize Date in JSON Respo
- Difference between Types.INTEGER and Types.NULL in
Never trust the input which you get from the user. Always run a check in your server side code be it type of file, size of file, etc. Use the REST API or Javascript to make the experience of the user smoother and faster.
You certainly shouldn't blindly trust the
Content-type
header, or any other header. These things should be used to inform your decisions about how to process the request. So,Content-type: application/json
should allow you to interpret the message body as a json object - that sort of request might then be passed to a JSON deserialiser to bind it to an object.It would be wrong to ignore the
Content-type
header just because the request body contains data which looks like something else. If the request is internally inconsistent then it should be rejected. It's one thing not to send aContent-type
header but quite another for the header to be wrong.So, the only situation where you might want to use some sort of automatic detection should be where you have no reasonable information about the content - either
Content-Type
is very generic (such as "/") or not present at all. In that situation it's worth deciding whether some kind of autodetection is possible or valuable.You should definitely reject all the requests that are missing
Content-Type
header (andContent-Length
as well) or have it set incorrectly.It's definitely not about being over-zealous, rather about securing the system. If you have suspicions about the content just check it. But remember to validate the size before checking the content. If you have a proxy server (e.g. nginx) it has appropriate modules to reject requests that are too big.