信任 "Content-Type" 文件上传
Trusting "Content-Type" on File Uploads
如果我支持我的 REST API 用户上传内容(主要是图片和视频),那么 安全 信任 Content-Type
他们在(多部分)上传中声明?还是我应该 运行 某种 "media type detection" 内容(例如,使用 Apache Tika)以确保声明的媒体类型与检测到的实际媒体类型相对应?引入这个媒体类型检测步骤是不是我太热心了?
永远不要相信你从用户那里得到的输入。始终 运行 检查服务器端代码,检查文件类型、文件大小等。使用 REST API 或 Javascript 使用户体验更流畅、更快速。
您绝对应该拒绝所有缺少 Content-Type
header(以及 Content-Length
)或设置不正确的请求。
绝对不是 over-zealous,而是保护系统。如果您对内容有怀疑,请检查它。但请记住在检查内容之前验证大小。如果你有一个代理服务器(例如 nginx),它有适当的模块来拒绝太大的请求。
您当然不应该盲目相信 Content-type
header 或任何其他 header。这些东西应该用于告知您有关如何处理请求的决定。因此,Content-type: application/json
应该允许您将消息 body 解释为 json object - 这种请求可能会被传递给 JSON 反序列化器以进行绑定它到 object.
仅仅因为请求 body 包含 看起来 像其他东西的数据而忽略 Content-type
header 是错误的。如果请求在内部不一致,那么它应该被拒绝。不发送 Content-type
header 是一回事,header 错误.
则完全是另一回事
因此,您可能想要使用某种自动检测的唯一情况应该是您没有关于内容的合理信息 - Content-Type
非常通用(例如“/") 或根本不存在。在那种情况下,值得决定某种自动检测是否可行或有价值。
如果我支持我的 REST API 用户上传内容(主要是图片和视频),那么 安全 信任 Content-Type
他们在(多部分)上传中声明?还是我应该 运行 某种 "media type detection" 内容(例如,使用 Apache Tika)以确保声明的媒体类型与检测到的实际媒体类型相对应?引入这个媒体类型检测步骤是不是我太热心了?
永远不要相信你从用户那里得到的输入。始终 运行 检查服务器端代码,检查文件类型、文件大小等。使用 REST API 或 Javascript 使用户体验更流畅、更快速。
您绝对应该拒绝所有缺少 Content-Type
header(以及 Content-Length
)或设置不正确的请求。
绝对不是 over-zealous,而是保护系统。如果您对内容有怀疑,请检查它。但请记住在检查内容之前验证大小。如果你有一个代理服务器(例如 nginx),它有适当的模块来拒绝太大的请求。
您当然不应该盲目相信 Content-type
header 或任何其他 header。这些东西应该用于告知您有关如何处理请求的决定。因此,Content-type: application/json
应该允许您将消息 body 解释为 json object - 这种请求可能会被传递给 JSON 反序列化器以进行绑定它到 object.
仅仅因为请求 body 包含 看起来 像其他东西的数据而忽略 Content-type
header 是错误的。如果请求在内部不一致,那么它应该被拒绝。不发送 Content-type
header 是一回事,header 错误.
因此,您可能想要使用某种自动检测的唯一情况应该是您没有关于内容的合理信息 - Content-Type
非常通用(例如“/") 或根本不存在。在那种情况下,值得决定某种自动检测是否可行或有价值。