0

背景:我有一个网站,人们可以在其中存储交易。作为交易的一部分,他们可以根据需要附上收据。

问题:如果允许用户将任何类型的文件扩展名上传到我的网站,是否存在任何安全风险?

信息:

  • 用户将是唯一重新下载相同文件的人
  • 用户将没有机会“运行”文件
  • 他们只能将其下载回给自己。
  • 没有其他用户可以访问其他用户的文件
  • 说会有大小限制(比如2mb)

更多信息:我最初打算将文件限制为“pdf/doc/docx” - 但后来意识到有些人可能想要存储 jpg 或 .xls 等 - 并意识到他们“可能”想要的文件列表店面挺大的。。。

编辑:该文件将存储在 public_html 之外-并通过接受文件名(不是路径)的“readfile()”函数提供服务-那么有什么可以“扰乱”readfile()吗?

4

2 回答 2

3

“用户将没有机会“运行”该文件”

只要您 100% 确定这将成立,它就是安全的。但是,请确保该文件将无法由网络服务器执行。例如,如果用户上传一个 .php 文件,请确保服务器不执行它。

计算机本身不会神奇地运行程序,所以基本上你只需要确保用户没有能力欺骗你的服务器运行文件。这意味着如果文件位于 Web 根目录下,则确保禁用正确的处理程序,或者如果文件不在则通过代理脚本传递它们(基本上echo file_get_contents('/path/to/upload')使用其他一些逻辑)

另一种选择是像这样存储文件,name.upload但这需要保留一个映射到存储名称的原始名称列表。

于 2012-05-08T00:56:51.220 回答
3

是的,除非您采取预防措施,否则这绝对是一种安全风险。可以说,要重新下载文件,用户必须转到example.com/uploads/{filename}. 用户可以上传恶意 PHP 文件,然后通过转到example.com/uploads/malicious.php. 当然,这会导致 PHP 脚本在您的服务器上执行,从而使他有足够的能力彻底破坏一切。

为防止这种情况,请创建一个接收文件名作为参数的页面,然后使用正确的content-type.

就像是,example.com/files?filename=malicious.php

于 2012-05-08T00:57:51.523 回答