安全的PHP文件上传脚本

9

1
什么脚本?我只看到一些适当处理的规则。 - Marc B
1
这些提示对我来说看起来不错,有些取决于您的特定要求/设置。 - user557846
3个回答

26

这是一个很棒的指南。 - CrandellWS
上面的缓存链接引用没有源代码文件的缓存副本可供下载,该文件在上述缓存文章中讨论。 - Drew
这个文件上传安全指南存在几个问题。首先是使用黑名单的整个概念。黑名单是一个失败的方案。你应该将允许的扩展名列入白名单,检查上传的文件扩展名是否与你将要保存的文件名相匹配,如果扩展名不在白名单中,则禁止访问。黑名单会在发现新漏洞时使你处于开放状态。白名单是未来的保障。 - Neil Davis

9

3

现在有很多文件上传脚本。 这个 并不比其他脚本差。

虽然防止上传非png文件的“保护”不起作用(它只检查文件名)。

上传文件是相当安全的 - 给别人下载它们的机会会让你的服务器面临某些类型的攻击。您引用的文章没有提到两个重要点:

  • 从与您的网页相同的域中绝不提供任何用户提供的文件。为下载设置单独的域。这样,即使有人设法上传Flash动画或一小段HTML,您的域也不会受到跨域攻击的影响(例如,如果您的应用程序具有example.org域,则应从downloads.example.com等域提供用户内容);
  • 始终使用受控制的标头服务上传的文件。

上传的危险在于程序员将上传的文件存储在文档树中,既不检查后缀名(*.php),也不检查内容。一旦这样做,恶意用户就能够在您的服务器上运行一个不受控制的脚本。哎呀。文件上传者应该始终检查文件名和内容,以确保文件与程序员预期的完全一致。 - JBH
你的回答并没有解释这个陈述:“上传文件是相当安全的 - 给别人下载它们的机会才会让你的服务器面临某些类型的攻击。”我提供了一个例子。 - JBH
@JBH,您的建议不好-遵循它将无法获得任何安全保障。而且,您所描述的“问题”始于从与应用程序的其余部分相同的域中为用户提供文件服务,这违反了我提出的两个规则中的第一个(并且还有许多其他愚蠢的错误)。如果您真诚地遵循我上面给出的两个规则,那么您的应用程序就是安全的。就这么简单。真的。 - fdreger
也许不错,但可能不是你想谈论的。我并不真的对争论感兴趣,我只是想帮助人们理解问题。从另一个域提供文件可以保护第一个,但不能保护第二个。如果我冒犯了你,请原谅我。干杯。 - JBH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接