【问题标题】:php file upload to the serverphp文件上传到服务器
【发布时间】:2013-11-05 00:00:37
【问题描述】:

从底部编写一个安全的文件上传 PHP 脚本对我来说听起来像是地狱。

不按特定顺序上传文件的基本规则:

1) 随机创建一个新文件,并为新上传的文件命名

2) 检查扩展名

3) 检查 exif 技巧

4) 将所有上传的文件存储在 Web 根目录之外,并且不授予该目录执行文件的权限。

5) 确保文件上传功能是PHP在上传文件时不执行代码

6) 检查文件大小

7) 做一些恶意软件扫描

8) 限制文件大小

所以我想这很多:)

我什至还没有开始为这一切编写脚本,因为我有 3 个基本问题。

1) 我的清单是否完整,如果缺少某些内容,请说明是哪一个

2) 是否有某种框架可以为我完成所有这些工作?一些简单的东西,而不是一个可以做很多其他事情的大块头。

3) 这是一个很好的指南吗? http://www.sitepoint.com/file-uploads-with-php/

我很想发布代码,但由于这个主题很大,我觉得最好问更大。

提前致谢。

【问题讨论】:

  • 当您将其转换为代码时,我不认为这是“巨大的”。然而,与其他人相比,#7 有点复杂。
  • 我想不出你还能做什么,这个列表非常详尽。
  • @Red 是的,你是对的 ;) 感谢您的两位 cmets。

标签: php security file-upload


【解决方案1】:

那篇文章中用于嗅探文件内容的“exif 技巧”和其他措施本身并没有什么用处。 (好的,值得检查上传的图像是否符合预期的像素大小,但这是特定于应用程序的,而不是安全问题。)

本文没有说明它试图通过文件类型嗅探解决的威胁模型是什么,但这通常试图做的是防止跨站点脚本攻击,其中攻击者在文件中包含一些活动内容。通常这是在文件中使用 HTML,浏览器(尤其是 IE)会嗅探并决定将其解释为 HTML,即使这不是提供文件的方式。不幸的是,检查一个文件是否以 PDF 标题开头,或者是否代表一个有效的 GIF 图像在这方面对您没有帮助,因为可以制作可以同时解释为不同文件类型的“变色龙”文件。

现代浏览器可以通过使用特定的非 HTML Content-TypeX-Content-Type: nosniff 标头提供文件来阻止这种攻击。然而,还有一些更隐蔽的攻击涉及将内容放入不受此标头影响的 Flash 或 Java 插件,而且它对旧版浏览器也不是无懈可击的。

阻止对上传文件进行 XSS 攻击的真正安全的方法是从不同的主机名(理想情况下,不同的域名和 IP 地址,但简单的子域至少大部分有效)为它们提供服务。然后,您可以让攻击者随意对用户上传托管网站进行 XSS,而不会对您的主网站产生负面影响。

病毒扫描不太可能证明对通用文件上传功能有用。如果您希望人们使用该站点来交换 Windows 可执行文件,那么扫描那些传统恶意软件可能是值得的,但对于一般情况,您通常关心针对网站本身的攻击——服务器利用、XSS、浏览器利用——和反病毒扫描仪无法检测到此类攻击。

创建一个新的随机文件名的步骤 (1) 比链接文章试图做的“清理”用户提供的文件名要好得多。它的“安全文件名”功能不会直接受到目录遍历的影响,但它仍然允许像 ..(单独)、空字符串 .htaccess 和会混淆 Windows 服务器的文件名(如尾随点) 、reserved names 和过长的名称。

您说得对,安全文件上传比最初看起来要复杂得多,不幸的是,大多数教程代码(尤其是 PHP)都非常糟糕。

【讨论】:

  • 超级帖子 :) 我认为您所说的非常有趣,在我编写上传功能之前,我需要重新访问我的思想中心。我认为解决我的问题的理想方法是使用某种框架,也许 Zend 会有一些我可以使用的花哨的东西。对我来说,将图像上传到子域似乎只有读/写权限是最好的解决方案。
猜你喜欢
  • 2017-06-02
  • 2015-06-27
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-02
  • 2014-03-22
相关资源
最近更新 更多