WAF 对文件上传漏洞的防护措施

  1. 文件类型检查
    • 白名单机制
      • 建立允许上传的文件类型白名单是一种有效的防护策略。例如,对于一个普通的企业文档管理网站,可能只允许用户上传常见的办公文件类型,如.docx、.xlsx、.pptx 等。WAF 可以通过检查文件的扩展名来确定文件类型是否在白名单内。这种方法简单直接,但也存在一定局限性,因为文件扩展名可以被篡改。
      • 为了弥补扩展名检查的不足,还可以结合文件头(Magic Number)检查。不同类型的文件有其特定的文件头格式。以 JPEG 文件为例,其文件头通常是十六进制的 “FF D8 FF”。WAF 可以读取上传文件的开头部分,验证文件头是否与声称的文件类型相符。如果扩展名是.jpg,但文件头不符合 JPEG 文件的特征,就可以判定为可疑文件并阻止上传。
    • 黑名单机制(作为补充)
      • 除了白名单,也可以设置黑名单来禁止特定的高危文件类型。例如,禁止上传.exe、.com、.bat 等可执行文件类型,因为这些文件很可能被用于恶意目的,如上传一个恶意的.exe 文件来执行远程控制或破坏服务器系统。不过,黑名单机制相对比较被动,因为新出现的恶意文件类型可能不在黑名单中。
  2. 文件内容检查
    • 病毒和恶意软件扫描
      • 集成防病毒引擎是防护文件上传漏洞的重要措施。当文件上传时,WAF 可以调用防病毒软件对文件进行扫描,检查文件是否包含已知的病毒、木马或其他恶意软件。例如,一些恶意软件会伪装成普通文件,如一个看似正常的 PDF 文件,但内部可能包含恶意脚本或病毒代码,通过防病毒扫描可以有效检测和拦截此类文件。
      • 防病毒扫描可以采用多种方式,如基于签名的扫描(检查文件是否包含已知恶意软件的签名)和基于行为的扫描(观察文件在模拟运行环境中的行为是否可疑)。为了提高扫描效率,可以对上传文件的大小进行限制,避免扫描过大的文件导致性能问题。
    • 恶意代码检查
      • 对于可能包含脚本的文件类型,如 HTML、PHP 等,WAF 可以检查文件内容是否包含恶意代码。例如,检查 HTML 文件中是否包含恶意的 JavaScript 代码,像 “<script>document.location.href=’http://malicious – site.com‘</script>” 这样的代码可能会导致用户被重定向到恶意网站。
      • 可以使用代码模式匹配技术,预先定义一系列恶意代码的模式,当上传文件的内容匹配这些模式时,就判定为含有恶意代码并阻止上传。同时,对于 PHP 文件,可以检查是否包含危险的函数调用,如 “eval()” 函数,因为它可以执行任意的 PHP 代码,是攻击者经常利用的函数之一。
  3. 上传行为检查
    • 限制上传大小和频率
      • 限制文件上传的大小可以防止服务器资源被恶意占用。例如,对于一个普通的图片分享网站,可能会将单个文件的上传大小限制在几兆字节以内。如果没有大小限制,攻击者可能会尝试上传一个超大的文件,耗尽服务器的存储空间和带宽资源。
      • 限制上传频率也是很重要的。例如,规定同一用户在一定时间内(如 1 小时)只能上传一定数量的文件。这样可以防止攻击者通过大量上传文件来进行暴力攻击或对服务器造成 DoS(拒绝服务)攻击。
    • 检查上传路径和权限
      • WAF 可以检查文件上传后的存储路径是否符合安全要求。确保上传的文件存储在一个受限制的目录中,该目录不应该有执行权限(对于可执行文件类型),并且不能被外部直接访问。例如,上传的文件应该存储在一个非 Web 可访问的目录下,需要经过特定的授权和验证程序才能被访问。
      • 同时,检查文件的权限设置。新上传的文件应该具有合理的权限,避免权限设置过宽导致文件被恶意利用。例如,文件的所有者应该是具有有限权限的用户,而不是具有管理员权限的用户,并且文件的读写执行权限应该根据业务需求进行严格限制。