Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
安全PHP文件上载脚本_Php_Forms_File_Upload_Storage - Fatal编程技术网

安全PHP文件上载脚本

安全PHP文件上载脚本,php,forms,file,upload,storage,Php,Forms,File,Upload,Storage,我想我已经问过两次这个问题了,但这是我第一次接近这个问题。我计划允许用户上传和下载他们的文件(.pdf、.doc、.exl、.ppt、.png、.jpg、.gif) 以下提示是否足够: 另外,有没有一个脚本我可以利用,我是新的php。有一百万的文件上传脚本在那里。不比其他人差 虽然“保护”不会上传PNG以外的文件(它只检查文件名) 上传文件是相当安全的——它给了其他人下载文件的机会,从而使您的服务器面临某些类型的攻击。您引用的文章没有提到两个要点: 切勿为来自与您的网页相同域的任何用户提供的

我想我已经问过两次这个问题了,但这是我第一次接近这个问题。我计划允许用户上传和下载他们的文件(.pdf、.doc、.exl、.ppt、.png、.jpg、.gif)

以下提示是否足够:


另外,有没有一个脚本我可以利用,我是新的php。

有一百万的文件上传脚本在那里。不比其他人差

虽然“保护”不会上传PNG以外的文件(它只检查文件名)

上传文件是相当安全的——它给了其他人下载文件的机会,从而使您的服务器面临某些类型的攻击。您引用的文章没有提到两个要点:

  • 切勿为来自与您的网页相同域的任何用户提供的文件提供服务。有一个单独的下载域。通过这种方式,即使有人上传flash动画或HTML,您的域也不会受到跨域攻击(例如,如果您的应用程序有example.org域,您应该从downloads.example.com提供用户内容)
  • 始终为上传的文件提供控制良好的标题

回复太晚,但我认为您的脚本应该基于以下内容:

它涵盖了安全性的所有方面,并解释了所有有效点。我希望这有帮助


编辑:以上链接已失效。

对于未来的读者,他们也是php新手:

在阅读Ricki在上的回答中提到的指南之前,我建议先阅读此答案,该指南提到了一个好的指南,并且是一本推荐阅读的书籍:

然后阅读Ricki提到的指南:


毕竟,如果你需要进一步的安全,你应该考虑断开互联网。P

什么脚本?我看到的只是一些正确处理的规则。提示对我来说很好,有些取决于您的特定要求\setup这是一个很好的指南上面的缓存链接参考没有上面链接的缓存文章中讨论的要下载的源代码文件的缓存副本。此文件上载安全指南存在几个问题。第一个是使用黑名单的整个概念。黑名单是一个失败的提议。您应该将允许的扩展名列入白名单,使用您将保存的名称检查上载的文件扩展名,如果扩展名不在白名单中,则不允许访问。黑名单会让您在发现新漏洞时随时打开。白名单是未来的证明。上传的危险在于程序员将上传的文件存储在文档树中,并且既不检查后缀(*.php),也不检查内容。一旦完成,恶意用户就可以在服务器上运行不受控制的脚本。哎呀。文件上传者应该经常检查文件名和内容,以确保文件正是程序员所期望的。你的回答并没有解释“上传文件是非常安全的——它给了其他人下载文件的机会,从而使你的服务器面临某些类型的攻击。”我提供了一个例子。@JBH你的建议很糟糕-遵循它不会给你带来任何安全。您所描述的“问题”始于为应用程序的其余部分提供来自同一域的用户文件,这违反了我的两条规则中的第一条(随后是许多其他愚蠢的错误)。如果你诚实地遵守我上面给出的两条规则,你的应用程序是安全的。就这么简单。真的。也许还不错,但也许不是你想说的。我不是真的对争论感兴趣,我只是想帮助人们理解这个问题。从另一个域提供文件可能会保护第一个域,但不会保护第二个域。如果我冒犯了你,我道歉。干杯