网站有让用户上传图片功能,怎么判断上传上来的图片是真正的图片而不是其他文件只修改了个扩展名的伪图片呢
Magic number 是指檔案前 16-bit 字元,用來判斷該檔案的類型
用 Node.js 來寫的話,應該是讀取檔案 Buffer 然後判斷 Magic number,例如:
var fs = require('fs') fs.readFile('./path/to/image.jpg', function(err, buf) { var JPG_MAGIC_NUMBER = 'ffd8' if (buf.toString('hex', 0, 2) === JPG_MAGIC_NUMBER) { return console.log('this file is JPG') } console.log('this file is not JPG') })
@chinghanho 这样是个办法,但是客户很聪明的在文件最前面加了这个特征,然后才是他的内容,
说个想法,用phantomjs上用固定尺寸显示上载的图片,非图片会显示出错,页面上是默认的broken image图像。
CNode 社区为国内最专业的 Node.js 开源技术社区,致力于 Node.js 的技术研究。
用 Node.js 來寫的話,應該是讀取檔案 Buffer 然後判斷 Magic number,例如:
@chinghanho 这样是个办法,但是客户很聪明的在文件最前面加了这个特征,然后才是他的内容,
说个想法,用phantomjs上用固定尺寸显示上载的图片,非图片会显示出错,页面上是默认的broken image图像。