Overview
允许用户上传文件可能会让攻击者注入危险内容或恶意代码,并在服务器上运行。
Details
无论编写程序所用的语言是什么,最具破坏性的攻击通常都会涉及执行远程代码,攻击者借此可在程序上下文中成功执行恶意代码。如果允许攻击者向某个可通过 Web 访问的目录上传文件,并能够将这些文件传递给代码解释器(如 JSP/ASPX/PHP),他们就能促使这些文件中包含的恶意代码在服务器上执行。 即使程序将上传的文件存储在一个无法通过 Web 访问的目录中,攻击者仍然有可能通过向服务器环境引入恶意内容来发动其他攻击。如果程序容易出现 path manipulation、command injection 或危险的 file inclusion 漏洞,那么攻击者就可能上传带恶意内容的文件,并利用另一种漏洞促使程序读取或执行该文件。 类型为 file 的 <input> 标签表示程序接受文件上传。 示例: <input type="file">
Recommendations
如果可以避免上传文件,请不要允许此操作。如果程序必须允许文件上传,则应当只接受程序需要的特定类型的内容,从而阻止攻击者提供恶意内容。依赖于上传内容的攻击通常要求攻击者能够提供他们自行选择的内容。限制程序能够接受的内容,可以在最大程度上限制可能被攻击的范围。检查文件名、扩展名和文件内容,确保它们都是应用程序所需的,并可供应用程序使用。