【问题标题】:Allowing users to upload ANYTHING允许用户上传任何东西
【发布时间】:2011-09-29 20:10:01
【问题描述】:

我正在构建一个文件共享网站,我在想,我希望我的用户能够上传和共享任何内容。

听起来很危险,我知道。但是,有没有一种方法可以让这成为可能?例如,当用户请求 mime 类型的链接时强制下载?而不是在页面上“运行”一些东西。

关于如何在没有安全问题的情况下允许任何文件类型的任何想法。

谢谢

【问题讨论】:

  • 大多数浏览器会阻止自动下载可执行文件,但用户可以接受提示并忽略警告。您是在问如何规避此警告?
  • 我很困惑。您的问题标题和第一句话谈到允许上传,而您的第二句话谈到强制下载。我不知道你在说什么。然后你的第三个说询问“如何允许文件类型”但没有明确的上下文 - 允许什么,允许什么,允许什么目的?
  • 我会上传一个 .php 文件来删除你的目录,听起来很危险吗?
  • @horatio 你在说无用的垃圾。 Megaupload 和 Rapidshare 允许您上传任何文件类型,无论危险与否,但它们的服务器是安全的。所以,这显然是有可能的,这里只有一半的白痴宁愿挑其他事情的错误但回答问题,因为事实是他们不知道如何回答这个问题。
  • 那么为什么 Topener 和其他成员能够理解我在说什么?问题很明确,我希望用户在我的服务器上上传和托管任何文件类型,而不会使我的服务器不安全。现在,问题是人们看到它并认为“天哪,这很危险,这不可能”,甚至在他们回答之前都没有进行研究。然后,这使我的整个问题陷入困境,并引发了很多反对票。 Topener 的回答为我打开了另一扇门,让我冒险下来,这被证明是解决方案。如果定义很差,Topener 是如何理解我的问题的?

标签: php


【解决方案1】:
  1. 将文件存储在用户无法通过浏览器访问的位置。 (所以在文档根目录之上)
  2. 加载文件时,使用readfile()函数。
  3. 设置正确的标题,包括这些:

    header("Content-Description: File Transfer");
    header("Content-Disposition: attachment; filename=[INSERT FILENAME HERE]");
    

    并且还为每种类型的文件使用正确的内容类型标头

【讨论】:

  • 有趣!不过,此解决方案是否有任何安全预防措施?
  • 始终确保文件不会在服务器上执行,因为它可能会损害您的服务器。除此之外,我不会看到任何重大风险
  • 完美。感谢您的响应,经过一些研究,这似乎是许多人在运行无限文件存储服务器时使用的解决方案。
  • @JamesJeffery(和 Topener):这确实是一个好方法。确保您使用location not accessible by the user through the browser 的意思是:某处高于 文档根目录,而不是:我将使用.htaccess 或类似内容中的一些指令隐藏目录。因为如果服务器的配置在未来某个时间点意外受到损害(例如推翻.htaccess 规则),那么仍然可以通过浏览器再次访问这些文件。
【解决方案2】:

如果您只希望它对其他用户造成危险(因为他们将立即共享病毒肆虐的文件),但为您的网络服务器提供一些保护免受代码注入攻击,您可以考虑将上传的内容存储在数据库中BLOB 字段。这至少应该让注入将在服务器上运行的代码变得更加困难。

【讨论】:

  • 下载大文件时会不会给SQL Server增加很大的负载?
【解决方案3】:

您可以使用简单的HTML multipart formPHP's $_FILES 来允许用户上传任何内容。我看到的唯一问题是文件大小限制。

您可以简单地发布指向任何这些文件的链接。决定文件是否被执行或下载的是用户的浏览器设置,而不是您的。因此,您可以建议他们右键单击它们,然后选择“保存到”,但除此之外它是有限的。

【讨论】:

    【解决方案4】:

    关于如何在没有安全问题的情况下允许任何文件类型的任何想法。

    你自己说。这就像想做炒鸡蛋,又不想打破鸡蛋。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-15
      • 2021-04-17
      • 2019-12-11
      相关资源
      最近更新 更多