- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 NodeJS/Formidable 并尝试保护我的后端以上传图像。
检查文件是否为图像的经典方法是使用如下正则表达式:
if(!file.name || file.name.match(/\.(jpg|jpeg|png)$/i)) {
console.log("the file is an image");
}else{
console.log("the file is not an image");
}
还有这个:
var fileType = file.type.split('/').pop();
if(fileType == 'jpg' || fileType == 'png' || fileType == 'jpeg' ){
console.log("the file is an image");
} else {
console.log( 'incorrect file type: ' + fileType );
}
这是一个很好的检查,但这还不够安全;事实上,如果我将 PDF 重命名为 JPG,浏览器会根据文件的扩展名提供 MIME/type : image/jpg 。这是一个安全问题,因为您可以将 JS 文件或其他任何内容重命名为 JPG 并将其上传到您的后端文件系统。
我发现这篇文章非常有趣:How to check file MIME type with javascript before upload?
它非常适合客户端检查,但我无法在后端重现它。
我想理想的方法是在上传前 4 个字节后即时分析流并检查真实的 MIME 类型。
有什么想法吗?
谢谢!
最佳答案
有效!您可以安装类似 readChunk 的模块将文件转换为缓冲区并编写类似的内容:
form.on('file', function(field, file) {
buffer = readChunk.sync(file.path, 0, 4100);
filetype = fileType(buffer);
if(filetype.ext.match(/(jpg|jpeg|png)$/i)) {
fs.rename(file.path, path.join(form.uploadDir, file.name));
}else {
fs.unlink(file.path);
}
});
关于javascript - NodeJS/强大的 : secure the backend for images upload,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41626124/
Stackoverflow JS Genius的! 我当前的项目有一个问题,它正在使用 Node 的HTTP createServer,并使用Formidable来解析主体数据。 请参阅下面的代码。
我正在尝试将文件上传到我的 NodeJS 服务器。我目前收到错误: 错误:错误的内容类型 header ,未知的内容类型:image/jpeg “image/jpeg”是有效的 MIME 类型,为什么
我有一个用作路由器的 Node.JS 服务器,可以向它发出 post 请求以上传文件,应该只允许 jpg/png/jpeg 扩展名我目前正在做的是: var form = new formidable
我正在使用https://github.com/felixge/node-formidable用于使用express上传文件。 虽然它工作得很好,但有一个问题:我有一个包含 9 个 type="fil
Haskell 的类型推理引擎比 Scala 的类型推理引擎强大得多。在 Haskell 中,我很少需要显式编写类型,而在 Scala 中,类型只能在表达式中推断,而不能在方法定义中推断。 例如,请参
我将 Superpowered 用于各种实时 FX,它们都非常简单。然而,音高变换是另一回事,我认为事实上是因为它基于时间拉伸(stretch)算法,当然必须处理随时间变化的输出,这比应用 EQ 或混
我正在使用mean stack 和formidable上传文件 表单具有 multipart/form-data 属性 exports.create = function(req, res) {
我正在尝试构建我的第一个 node.js 应用程序,但是,使用 node server.js 运行时,我收到以下错误消息: connect: multipart: use parser (multip
对于强大的 npm 包,当我使用 import * as formidable from "formidable" 时,我收到一条错误消息,指出 formidable({ multiples: tru
我注意到了 std::string str; str += 'b'; // works str.append('b'); // does not work str.append(1, 'b'); //
我有一个需要访问本地 FS 的 HTML/JS(YUI 框架)照片管理器。我应该将 HTML/JS 移动到 AIR,还是硬着头皮将其“移植”到 Flex AIR? 我知道营销说的是什么,但我想要真正的
我是一名优秀的程序员,十分优秀!