让用户将内容上传到我的网站有哪些安全风险?

信息安全 Web应用程序 应用安全 上传文件
2021-08-19 00:39:28

作为一名网页设计师(不是安全专家),我想知道:如果我允许用​​户将内容上传到我的网站(视频、图像和文本文件),真正的风险是什么?

4个回答

允许将内容上传到您的网站存在一些风险,但它们对您的重要性可能取决于您正在设计的网站将如何运作。

首先是恶意软件上传。如果攻击者可以将恶意软件上传到您的网站,并且该恶意软件被您的用户下载并执行,那么这可能是一个问题。防止这种情况通常依赖于限制可以上传的文件类型(需要注意的是,您不应该只依赖文件扩展名)和对上传的内容使用恶意软件扫描的组合。当然,事物的扫描方面只会阻止已知的签名,并且可以很容易地绕过。

第二个潜在问题是他们是否可以上传活动内容并由您的应用程序执行。因此,例如,如果您的站点使用 php,那么如果他们可以上传 php 脚本,然后让它作为您应用程序的一部分运行,那么他们很可能能够控制服务器,或者至少可以访问存在的其他信息在应用程序中。

我见过的解决这个问题的一种方法是确保上传的文件不放在 web 根目录中,并确保 web 服务器不会从该位置执行文件。

第三个风险,是用户上传“非法”材料。这可能是一个棘手的法律问题,但如果您允许用户生成内容,您可能迟早要处理它。对此的修复似乎主要是程序性的。与您的托管公司和 ISP 保持良好的关系,并确保您可以响应要求快速删除内容的请求,如果您所在的司法管辖区要求在收到请求时删除内容(例如,DMCA 请求) )。

如果您的服务器配置不当,可能会导致在您的服务器上下文中执行恶意代码并控制您的文件。其中一个例子是众所周知的 PHP 后门c99shell有一些建议可以使此功能更安全:

  1. 使用其他域(或子域)来存储用户上传的文件
  2. 确保用户不能上传服务器将执行的任何类型的文件(检查内容类型或使用特定语言的工具来读取文件的内容并检查正确的 mime 类型)
  3. 确保上传的文件没有被执行的权限。
  4. 当允许其他用户下载文件时,有时使用 Content-Disposition HTTP 标头强制将其作为附件很有用

FileInclude 是网站中最严重的安全漏洞之一,想想如果有人将 C99 Shell(这是我见过的最糟糕的 php 脚本之一)上传到您的网站并执行它会发生什么。

攻击者可以上传可以破坏身份验证的恶意代码或上传 .exe 文件。当其他用户打开此类文件时,可能会导致重大安全问题并影响系统性能。