博客

程序员征服安全:分享与学习系列 - 不受限制的文件上传

January 10, 2019
Jaap Karan Singh

“不受限制的文件上传”问题本身并非一种攻击,而是一种常见的漏洞状态,它让攻击者能够轻易访问应用程序和网络资源。这就像在寒冷的天气里穿着湿衣服走动:虽然这本身不一定会让你生病,但它会降低你的抵抗力,以至于任何伺机而动的病毒都能轻易击垮你的身体防线。

在网络安全领域,攻击者往往会迅速利用任何支持不受限制文件上传的应用程序或程序,而其后果可能是毁灭性的。精明的攻击者可以利用这种不受限制的访问权限上传恶意文件、设置脚本以窃取凭据,或利用应用程序自身的权限对网络发起更深层次的攻击。即使是技术水平较低的攻击者,也能利用这种毫无限制的访问权限执行拒绝服务攻击,甚至导致应用程序崩溃。

幸运的是,有很多方法可以解决“不受限制的文件上传”问题,从而将潜在的攻击者拒之门外。为此,我们将讨论关于“不受限制的文件上传”的三个关键方面:

  • 它们的工作原理
  • 它们为何如此危险
  • 如何部署防御措施来阻止它们。

攻击者如何利用“不受限制的文件上传”?

网站允许公众上传文件有很多正当理由。例如,公司在招聘时可能希望求职者上传简历;银行可能鼓励客户在家填写重要文件,以便申请贷款或开立新账户;旅游或社交媒体网站则可能邀请用户上传照片与他人分享。

允许文件上传有很多正当理由。默认情况下,大多数新应用程序可能都会允许上传任何类型的文件,且不加限制。而当潜在的攻击者发现这些上传操作没有任何限制时,麻烦就开始了。

不对上传内容进行限制,会使网站面临三种类型的攻击。从最简单的攻击开始:恶意用户可以上传巨大的文件,例如包含数百GB信息的压缩包。这不仅会占用带宽,还可能导致分配给应用程序的存储空间过载。

接下来是更恶劣的攻击:用户上传恶意文件,如病毒,甚至是更危险的勒索软件。这就像那个古老的迷信传说——你必须亲自邀请吸血鬼进入你的家。如果你挂出一块牌子说任何人都可以自由出入,这就好比开启了不受限制的文件上传。你不再能控制进入门内的东西,因此你应该预料到,并非每一位访客(或每一个文件)都是善意的。其中一些可能就是怪物。

最后,技术高超的攻击者可以利用不受限制的上传权限在网络中立足,从而进行更深层次的攻击。由于对上传内容没有任何限制,攻击者可以通过该流程发送自己的 Web Shell。此后,他们便可以向 Shell 发送命令,这些命令将以与应用程序相同的权限级别在服务器上执行。

为什么拥有不受限制的文件访问权限如此危险?

虽然部署一个具有不受限制文件访问权限的应用程序并不会立即造成危险,但这基本上等于在你的网络安全防线上打开了一个缺口,并邀请他人攻击你的组织。迟早会有人趁虚而入。

在最基础的层面上,攻击者甚至不需要高超的技术就能造成破坏。只需压缩超大文件并上传,就足以让合法用户无法使用服务。随着时间的推移,根据应用程序的编程和网络架构,这甚至可能导致应用程序或整个网站崩溃。

拥有不受限制的文件访问权限还可能绕过网络防火墙和其他保护措施。如果你已经为攻击者开辟了一条直接向核心网络上传恶意软件的路径,那么即使你有扫描器来检查传入的电子邮件或员工的网页浏览活动,也无济于事。恶意软件可能会导致应用程序甚至运行它的服务器崩溃,尽管这可能是最好的结果。在最坏的情况下,像勒索软件这样真正的恶意程序可以利用被攻破的服务器扩散到整个网络。

技术更娴熟的攻击者在利用具有不受限制文件访问权限的应用程序时,可能不会表现得那么明显。相反,他们会利用该漏洞攻破应用程序,并以此为跳板深入网络,缓慢移动以试图逃避检测。他们可以通过上传 Web Shell 或其他 .exe 类型的文件,并在文件落地后直接向其发送命令来实现这一点。用户通过 Shell 运行的任何内容通常都会由服务器执行,并使用为托管该应用程序所设置的权限级别。对服务器而言,这些命令来自应用程序,因此不太可能受到进一步的检查或审查。

所有这些都使得“不受限制的文件访问”漏洞成为网络中最危险的漏洞之一。这可能不是“是否”会出问题的问题,而是“何时”会出问题的问题。

如何消除“不受限制的文件访问”漏洞?

那么,如何解决不受限制的文件访问问题呢?最简单的方法就是对允许上传的文件类型添加一项或多项限制。你可以将这些限制告知用户,例如告诉他们网站仅接受 Word 或文本文件;如果是图片分享网站,则仅接受 .jpg 或 .gif 格式。在后端,你需要创建一个可接受文件扩展名的白名单,并拒绝其他所有类型。此外,还应对文件名长度设置上限。如果文件名中包含特殊字符(这可能暗示着试图触发可执行命令),也应一并拒绝。

除了文件类型和命名规则外,您还需要限制每个文件的最大大小。最大限制应根据应用程序预期收集的文件类型设定在合理范围内。例如,Word 文档可限制在 10 MB 左右,而图形文件则可适当放宽至 50 MB 左右。如果预期文件的大小范围非常明确(例如用户上传特定表单时),也可以设置最小文件大小限制。

攻击者仍可能通过巧妙手段绕过文件类型和大小限制,植入 Shell 或其他恶意程序。为防患未然,收集的文件应始终存储在无执行权限的私有目录中。为进一步提高安全性,系统可将文件重命名为随机字符序列。这能防止外部未经授权的用户探测上传文件的位置,从而避免泄露网络内部信息。但若采取此措施,您通常需要建立并维护一张映射表,以关联随机文件名与原始文件名。

最后,所有通过上传进入网络的文件,都应使用组织内部的防御程序进行恶意软件和病毒扫描。虽然这无法拦截所有威胁,但作为重要的安全防线,它能有效检测出 90% 以上试图通过文件上传进入系统的常见恶意文件。

解决不受限制的文件上传问题

一旦在后端部署了多层安全防护,不受限制的文件上传问题便迎刃而解。通过对文件上传施加限制,您从根本上消除了该隐患,使其不再“不受限制”。系统只允许合规文件进入,将所有恶意程序拒之门外。

如需深入了解,您可以查阅 OWASP 的不受限制文件上传预防备忘单,其中概述了此类情况在网络中引发的常见问题。您还可以通过 Secure Code Warrior 平台的免费展示来测试您新掌握的防御知识,该平台致力于将网络安全团队培养成顶尖的数字战士。若想了解更多关于攻克此漏洞及其他各类威胁的信息,请访问 Secure Code Warrior 博客。

准备好立即应对此漏洞了吗?前往战场,测试您的技能:

标语

在 AI 驱动的开发成果发布前实现有效治理

评估 AI 辅助风险,在提交代码时强制执行安全编码策略,并加速整个软件开发生命周期的安全交付。

预约演示
资源库

探索更多博客

获取有关安全编码、人工智能治理和软件风险管理的专家内容。

浏览全部
案例研究
筛选标签
这是 div 块中的一段文本。

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

了解更多
案例研究
筛选标签
这是 div 块中的一段文本。

统一的安全文化:Sage 如何打造其安全倡导者项目

了解 Sage 如何通过灵活且以关系为导向的方法提升安全性,成功培养了 200 多名安全倡导者,并实现了显著的风险降低。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

2026年网络安全意识月:理解人工智能安全对企业防御至关重要

目前,大多数顶级人工智能公司已公开呼吁全球放缓人工智能的发展速度,以便安全防护措施能够跟上步伐。然而事实是,严重的安全问题已经显现。随着人工智能实施带来的经济成本和风险不断累积,无数安全领导者和高管团队正处于紧迫的境地。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

赋能要素 8:打造项目品牌

成功的安全编码项目不仅需要优质的内容。赋能要素 8 展示了如何通过品牌化将参与过程转变为一种令人向往、以地位为驱动的体验。

了解更多
博客
筛选标签
这是 div 块中的一段文本。

每一位员工现在都处于 AI 网络安全的最前线

企业技术格局正以一种鲜有人预料到的速度发生剧变,直到为时已晚。我们已正式跨越了从人工编写代码和基础辅助编程,进入“智能体开发生命周期”(ADLC)的时代。虽然自主 AI 智能体有望在多个职能领域实现前所未有的效率,但它们也带来了全新的安全和监管风险。

了解更多

在产品发布前确保 AI 驱动的开发安全

洞察开发风险,执行安全策略,并在整个软件开发生命周期中预防漏洞。

预约演示
未找到相关项目。