我正在构建一个允许用户上传音频文件的网络应用程序。
鉴于今天 bitcointalk 出现故障,并且猜测它可能已被攻击者上传一段伪装成头像图像的恶意代码所破坏,检查服务器上上传的文件以确保它是真实的最佳方法是什么一个有效的音频文件?是否有我应该使用的库或 PHP 中内置的函数?
它是否是有效的音频文件并不重要。您可以将有效的“变色龙”文件同时解释为两种文件类型。
上传的文件应该:
使用不是来自用户输入的文件名存储在文件系统上,在一个目录中,网络服务器设置为仅提供静态文件而不执行代码。(避免一系列代码注入和目录遍历攻击;听起来这是 bitcointalk 的问题,如果他们在 avatars 目录中有一个 .php 文件。)
只能从与主站点不同的主机名(最好是不同的域名)提供服务。(击败上传内容中的跨站点脚本攻击,因为破坏一次性上传域没有任何好处。)
验证文件的内容是您可能想要做的事情,以使您的应用程序易于使用,但您不应该依赖它来保护您免受恶意上传。