禁止上传哪种类型的文件

时间:2010-04-01 12:19:41

标签: php file upload file-upload

我想在我的网站上放置一个人们可以上传内容的部分,我想知道哪些类型的文件我应该禁止他们上传。

4 个答案:

答案 0 :(得分:3)

您不能询问禁止哪种类型的文件(黑名单),但允许使用哪些类型的文件(白名单)。

请记下您希望用户上传的文件,并确保您的应用检查文件是否采用允许的格式。

主要是您的清单不应包括:

  • PHP文件或任何其他脚本语言文件
  • 可执行文件

答案 1 :(得分:3)

这实际上取决于你要对文件做些什么。如果你只是存储它们,理论上你甚至可以接受世界上最糟糕的计算机病毒的集合 - 只要这些文件没有被执行。

正如rogeriopvl建议的那样,最好创建一个您想要允许的文件类型的白名单。

永远不要依赖随浏览器发送的MIME类型。始终自行检查文件类型,例如如果您只想允许图片使用getimagesize()

可以找到关于这个问题的非常好(但冗长)的讨论here

答案 2 :(得分:2)

检查上传文件的扩展名甚至不是故事的一半。有文件名语法问题,类型嗅探问题,脚本/插件源问题以及更多需要担心的问题。

制作一个不会危及应用程序的文件存储桶很难,而不是轻易采取措施。作为一个起点,考虑将文件从不同的[sub]域提供给文件管理应用程序,并且不要使用用户提交的文件名作为服务器文件系统上文件名的基础。

(请阅读Pekka链接中的讨论。)

答案 3 :(得分:1)

任何可能利用您的网站或应用程序的东西,这将是php文件(显然),任何类型的可执行文件,以及您不希望承担托管责任的非法内容。

我会根据他们的Mime类型和文件扩展名实现您希望允许其上传和检查的文件扩展名的白名单,并编写有关哪些文件可以上传到您的网站的政策。

我还会将IP地址和其他相关数据与文件一起存储,以防万一您需要阻止某人使用或滥用您的系统。这是一项很多工作,但让用户将文件上传到您的网站并不是一件容易接受的事情。