我正在处理一个将用户上传到服务器的脚本,并且作为一个额外的安全层我想知道:
有没有办法检测文件的真正的扩展/文件类型,并确保它不是另一个文件类型掩码与不同的扩展名?
每个类型/扩展名是否有字节标记或某些唯一标识符?
我想能够检测到有人没有将其他扩展程序应用到他们正在上传的文件中.
谢谢,
不是真的,不行
您将需要读取每个文件的前几个字节,并将其解释为有限集合的已知文件类型的标题.大多数文件具有不同的文件头,在前几个字节中的某种元数据或MP3的情况下的前几个千字节.
对于我的程序,我将上传的图像发送到try-catch块中的imagemagick,如果它被炸毁,那么我猜这是一个坏的形象.这应该被认为是不安全的,因为我正在加载任意(用户提供的)二进制数据到一个外部程序,这通常是一个攻击向量.在这里,我相信imageMagick对我的系统不做任何事情.
我建议为您打算使用的重要文件类型编写自己的处理程序,以避免任何攻击向量.
编辑:我在PHP中看到有一些工具可以为您做这个.
此外,MIME类型是用户浏览器声称该文件是什么.在代码中阅读并对其进行操作非常有用,但它并不是一种安全的方法,因为任何发送坏文件的人都会轻松地伪造MIME标题.它是一种前线防御,以保持您的代码期望JPEG在PNG上禁止,但如果有人将病毒嵌入到.exe并将其命名为JPEG,则没有理由不欺骗MIME类型.