javascript - 使用 Node 和 AWS Lambda 保护图像上传
问题描述
我正在通过浏览器表单实现图像上传,并且正在使用 AWS 和 NodeJS。该过程是用户选择一个文件,提供附加信息,然后使用multipart/form-data
.
这很好用,因此有效负载通过 API Gateway ---> Lambda 并且此 lambda 上传到 S3 存储桶。我正在使用busboy处理多部分数据并最终得到包含从前端发送的所有数据的漂亮 JSON 对象,例如:
{
userName: "Homer Simpson",
file: base64endcoded_string,
}
然后我抓住它base64endcoded_string
并上传到 S3,这样文件就在那里,我可以打开它,下载等。
现在,显然我不信任来自前端的任何输入,我想知道确保发送的文件不是恶意的最佳方法是什么。在这种情况下,我需要只允许上传图片,比如 png、jpg/jpeg 大小不超过 2mb。
Busboy 给了我 MIME 类型、编码和其他详细信息,但不确定这是否足够可靠,或者我应该使用mmmagick 之类的东西。这些解决方案的安全性和可靠性如何?任何指针将不胜感激。
解决方案
OWASP 对此有一个部分有一些想法,无论如何我发现保护图像上传的最佳方法是转换它,期间,如果你可以转换它是一个图像,你确定任何附加信息(代码,隐藏数据等)在转换过程中被删除,如果你不能它不是图像。
另一个优点是您可以剥离 exif 信息,添加一些数据(例如水印)等
推荐阅读
- javascript - Javascript计算TABLE行中复选框的数量
- javascript - Next.js - 我如何使用 Provider 来包装路由并使用 Context 和 Hooks
- pine-script - 为什么代码现在全白显示?它曾经是彩色编码的,现在功能、注释等之间没有区别
- mysql - 数据库表添加额外字段或创建新表并左连接
- ios - IOS 13 中的模糊值减少 - filters.gaussianBlur.inputRadius
- sql - PERCENTILE_CONT 函数内部的非聚合函数存在问题
- html - can't insert tables within dd tags in markdown syntax
- javascript - Chartjs Line Chart showing old data when hovering
- python - Function that concatenates a string and a integer converts to float before converting to string
- scala - 如何解决递归函数中的变量增量问题