我正在编写一个脚本,该脚本将处理用户上传到服务器的内容,作为附加的安全层,我想知道:
有没有办法检测文件的真实扩展名/文件类型,并确保它不是用不同扩展名掩盖的另一种文件类型?
每种类型/扩展是否有字节标记或某种唯一标识符?
我希望能够检测到有人没有在他们上传的文件上应用不同的扩展名。
不完全是,不。
您将需要读取每个文件的前几个字节并将其解释为一组有限的已知文件类型的标头。大多数文件都有不同的文件头,在前几个字节或前几千字节(对于 MP3)有某种元数据。
您的程序只需尝试为您接受的每种文件类型解析该文件。
对于我的程序,我将上传的图像发送到 try-catch 块中的 imagemagick,如果它爆炸,那么我猜这是一个坏图像。这应该被认为是不安全的,因为我将任意(用户提供的)二进制数据加载到外部程序中,这通常是一个攻击向量。在这里,我相信 imageMagick 不会对我的系统做任何事情。
我建议为您打算使用的重要文件类型编写自己的处理程序,以避免任何攻击媒介。
编辑:我在 PHP 中看到有一些工具可以为您执行此操作。
此外,MIME 类型是用户浏览器声明文件的类型。读取这些内容并在代码中对其进行操作非常方便且有用,但这不是一种安全的方法,因为任何向您发送不良文件的人都会轻松伪造 MIME 标头。这是一种前线防御措施,可以防止您期望 JPEG 的代码出现在 PNG 上,但如果有人在 .exe 中嵌入病毒并将其命名为 JPEG,则没有理由不欺骗 MIME 类型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)