Web安全 - 文件上传漏洞(File Upload Vulnerability)

文章目录

  • OWASP 2023 TOP 10
  • 导图
  • 定义
  • 攻击场景
    • 1. 上传恶意脚本
    • 2. 目录遍历
    • 3. 覆盖现有文件
    • 4. 文件上传结合社会工程攻击
  • 防御措施
    • 1. 文件类型验证
    • 2. 文件名限制
    • 3. 文件存储位置
    • 4. 文件权限设置
    • 5. 文件内容检测
    • 6. 访问控制
    • 7. 服务器配置
  • 文件类型验证实现
    • Hutool的`FileTypeUtil`
    • 使用场景
    • Java代码实现:基于Hutool的Magic Number验证
    • 详细说明
      • Hutool的FileTypeUtil工作原理
      • 代码流程
      • 支持的文件类型
      • 防御措施分析
      • 文件上传防御流程
  • 组合攻击
    • 文件上传与路径穿越
    • 文件上传与代码注入
    • 文件上传与CSRF
  • 漏洞Code演示与修复
    • 存在文件上传漏洞的代码
    • 漏洞分析
    • 修复示例
  • 文件上传漏洞与其他常见漏洞的组合攻击
    • 文件上传漏洞 + 路径穿越
      • 攻击场景:绕过文件存储路径限制
      • 高级利用步骤
      • 防御措施
    • 文件上传漏洞 + 远程代码执行(RCE)漏洞
      • 攻击场景:利用脚本文件上传实现RCE
      • 高级利用步骤
      • 防御措施
    • 文件上传漏洞 + 跨站脚本(XSS)
      • 攻击场景:通过文件上传传播XSS攻击
      • 利用步骤
      • 防御措施
    • 文件上传漏洞 + CSRF
      • 攻击场景:利用CSRF强制上传恶意文件
      • 利用步骤
      • 防御措施
  • 组合漏洞Code : 路径穿越与远程代码执行(RCE)
    • 场景介绍
    • 问题代码
    • 漏洞分析
    • 利用步骤
    • 防御措施
    • 修复代码
    • 防御措施分析
    • 详细说明
      • 攻击原理
      • 防御机制

在这里插入图片描述

OWASP 2023 TOP 10

在这里插入图片描述

OWASP Top 10 概述

OWASP (Open Web Application Security Project) Top 10 是一份最常见和最危险的Web应用安全风险列表,由安全专家定期更新。 旨在提高开发人员、测试人员以及组织的安全意识并帮助他们预防这些漏洞。

2023年OWASP Top 10 列表

在这里插入图片描述

主流防范措施

  1. Broken Access Control

    • 描述:未能正确执行访问控制,允许用户访问他们不应该拥有的权限或资源。这可能导致数据泄露、数据篡改等问题。
    • 防御措施:严格实施基于角色的访问控制(RBAC),并确保敏感操作具有足够的授权检查。
  2. Cryptographic Failures

    • 描述:不当的加密实践或加密算法的使用不当,可能导致敏感数据(如密码、信用卡信息)被暴露或窃取。
    • 防御措施:使用最新的加密标准(如AES-256-GCM、RSA-2048),并避免使用弱或过时的加密算法。
  3. Injection

    • 描述:应用未能对用户输入进行有效的验证或转义,导致恶意代码注入(如SQL注入、命令注入)并执行在服务器上。
    • 防御措施:使用参数化查询、输入验证、输出转义技术,避免拼接SQL或动态代码。
  4. Insecure Design

    • 描述:系统在设计阶段未考虑安全问题,导致应用架构中的基本安全漏洞。
    • 防御措施:在开发生命周期中引入威胁建模、攻击面分析等设计阶段的安全审查。
  5. Security Misconfiguration

    • 描述:错误的配置(如不安全的默认设置、过时的软件或未配置的安全功能),可能使应用程序面临攻击。
    • 防御措施:定期审计和测试系统配置,使用自动化工具识别和修复配置问题。
  6. Vulnerable and Outdated Components

    • 描述:使用了具有已知漏洞或未及时更新的第三方库和组件,可能被攻击者利用。
    • 防御措施:确保使用依赖管理工具(如Maven、npm),并定期更新组件,避免使用过时的版本。
  7. Identification and Authentication Failures

    • 描述:认证和身份验证流程中的缺陷,可能导致用户冒充、会话劫持等问题。
    • 防御措施:实施强密码策略、使用多因素认证(MFA)和加固会话管理机制。
  8. Software and Data Integrity Failures

    • 描述:未能保证软件更新和数据的完整性,可能使攻击者篡改关键数据或上传恶意更新。
    • 防御措施:使用签名机制来验证更新包的完整性,确保数据在传输和存储过程中的可靠性。
  9. Security Logging and Monitoring Failures

    • 描述:缺乏适当的日志记录和监控,无法有效检测、响应或追踪安全事件。
    • 防御措施:实施集中化的日志记录、主动的监控和告警系统,确保能够及时发现并响应异常行为。
  10. Server-Side Request Forgery (SSRF)

    • 描述:攻击者通过伪造服务器端的请求来获取未授权的内部资源或数据,通常利用未受限制的服务器端请求机制。
    • 防御措施:限制服务器端可以发起的请求范围,避免允许用户输入直接控制服务器端的请求参数。

重点风险与防御措施建议

  1. Broken Access Control:最重要的防御措施是定期审查权限设计,确保每个用户只能访问必要的资源。建议结合应用的访问控制系统与自动化测试工具,确保权限配置不被篡改。

  2. Cryptographic Failures:确保敏感数据加密和密钥管理机制符合行业标准,如使用硬件安全模块(HSM)来保护密钥。避免明文传输或存储敏感数据。

  3. Injection:对于Web应用来说,防止注入攻击的最佳实践是始终使用参数化查询和预编译的语句。严禁直接拼接用户输入构建SQL或命令。

  4. Security Misconfiguration:安全配置管理应作为持续改进的一部分,尤其是在引入新服务或更新系统时,保持自动化的安全配置审计机制至关重要。

  5. SSRF:严格限制后端服务器能够访问的网络和资源,禁止对内部资源(如metadata或本地IP)发起请求。


导图

在这里插入图片描述


定义

文件上传漏洞是指Web应用允许用户上传文件,但没有对上传文件进行充分的验证和限制,导致攻击者可以上传恶意文件,如脚本、恶意代码等,进一步执行恶意操作。这种漏洞常见于文件管理、头像上传或文档管理等功能中。


攻击场景

文件上传漏洞有多种利用方式,攻击者可能会:

1. 上传恶意脚本

  • 攻击者上传一个恶意文件(例如PHP、ASP、JSP等),然后通过URL直接访问该文件,导致服务器执行其中的恶意代码。这是最常见的文件上传利用方式,尤其是在Web服务器允许解析用户上传的文件时。

2. 目录遍历

  • 攻击者可能通过上传文件并结合路径穿越漏洞,将文件保存到特定位置(例如Web可执行目录或系统目录),以进一步执行代码或操控服务器。

3. 覆盖现有文件

  • 通过上传文件覆盖系统中的重要文件,攻击者可能篡改配置文件、脚本或数据库配置,导致服务瘫痪或安全性失效。

4. 文件上传结合社会工程攻击

  • 攻击者上传看似无害的文件(如图像或PDF),诱骗其他用户下载并打开,实际包含恶意代码,导致用户系统感染恶意软件。

防御措施

为了防止文件上传漏洞,应采取多层次的防御措施:

1. 文件类型验证

  • 验证上传文件的MIME类型和文件扩展名,确保只允许上传预期的文件类型。
  • 然而,文件扩展名容易被伪装,应使用文件内容的签名(如Magic Number)进一步验证。

2. 文件名限制

  • 对上传的文件名进行严格限制,禁止使用特殊字符和文件路径符号(如../),以防止路径穿越攻击。
  • 文件名应进行随机化处理,防止攻击者通过猜测文件名进行操作。

3. 文件存储位置

  • 上传的文件应存储在安全的目录之外,不能直接通过Web服务器访问。例如,上传目录应放置在Web根目录之外,避免通过URL直接访问。
  • 如果必须存放在可访问的目录中,确保该目录不具有执行权限。

4. 文件权限设置

  • 上传的文件应设置为只读权限,并禁止脚本执行。
  • 利用操作系统的权限控制或设置Web服务器的目录权限来限制上传文件的访问范围。

5. 文件内容检测

  • 对上传文件进行内容审查,避免恶意代码注入。可以使用杀毒软件或基于规则的扫描器检查上传文件的安全性。

6. 访问控制

  • 限制文件上传功能仅供授权用户使用,并确保不同用户之间的文件操作隔离。
  • 上传后验证用户身份,确保文件仅能被合法的用户访问或处理。

7. 服务器配置

  • 在服务器配置层面禁用执行特定类型的文件(如PHP、JSP等),确保即使恶意脚本被上传,也无法被执行。
  • 在Nginx或Apache中,可以通过设置Content-Disposition头将文件强制下载,而不是直接在浏览器中执行。

文件类型验证实现

Hutool的FileTypeUtil

Hutool是一个功能强大的Java工具库,提供了丰富的工具类,简化了许多常见的Java开发任务。FileTypeUtil工具类能够根据文件的内容(Magic Number)自动判断文件类型,无需手动编写文件签名比对逻辑。

使用场景

通过Hutool的FileTypeUtil,可以直接读取文件头部字节,判断文件的真实类型,防止攻击者伪装文件扩展名上传恶意文件。


Java代码实现:基于Hutool的Magic Number验证

package com.artisan.fileVunl;import cn.hutool.core.io.FileTypeUtil;
import java.io.File;
import java.io.IOException;
/*** @author 小工匠* @version 1.0* @date 2024/10/2 11:50* @mark: show me the code , change the world*/public class HutoolMagicNumberValidator {public static void main(String[] args) throws IOException {// 示例文件路径File file = new File("D:\\Blog\\006Xzox4gy1gdmmzfm2ioj303a03awem.jpg");// 调用Hutool的FileTypeUtil验证文件类型String fileType = FileTypeUtil.getType(file);if (isValidFileType(fileType)) {System.out.println("文件类型验证通过,文件类型是: " + fileType);} else {System.out.println("文件类型无效,上传被拒绝");}}/*** 根据文件类型判断是否为允许的类型*/private static boolean isValidFileType(String fileType) {// 允许的文件类型,如JPEG、PNG和PDFreturn "jpg".equals(fileType) || "png".equals(fileType) || "pdf".equals(fileType);}
}

在这里插入图片描述

详细说明

Hutool的FileTypeUtil工作原理

FileTypeUtil.getType(File file)方法通过读取文件的前几个字节(文件头部的Magic Number),匹配Hutool库中已知的文件签名,然后返回文件的实际类型(如jpgpngpdf等)。

代码流程

  1. 读取文件:通过Hutool的FileTypeUtil读取文件内容,判断其实际类型。
  2. 验证文件类型:将文件类型与允许的类型列表进行比对,确保文件符合预期的类型。
  3. 输出验证结果:如果文件类型匹配,允许上传;否则,拒绝文件上传。

支持的文件类型

Hutool的FileTypeUtil支持多种常见文件类型,包括图片、文档、视频等,适用于多种文件上传场景的安全防护。


防御措施分析

  • 简化实现:Hutool封装了Magic Number验证逻辑,开发者无需手动维护文件签名列表,减少了代码复杂度。
  • 扩展性强:Hutool支持多种常见文件类型,可以根据项目需求进行扩展,适应复杂的文件上传场景。
  • 结合多层防御:在Magic Number验证基础上,依然可以结合文件扩展名和MIME类型的验证,提供多层次的防御。

文件上传防御流程

  • 第一步:文件扩展名验证:确保上传文件的扩展名符合预期。
  • 第二步:MIME类型验证:确保文件的MIME类型与扩展名和内容一致。
  • 第三步:Magic Number验证:利用Hutool的FileTypeUtil进一步确认文件内容的真实性,避免伪造文件上传。

组合攻击

文件上传与路径穿越

  • 如果文件上传功能存在路径穿越漏洞,攻击者可以通过操控上传路径,将恶意文件上传至特定目录(如Web根目录),从而直接通过URL访问并执行。

文件上传与代码注入

  • 在文件上传漏洞中,如果攻击者可以上传动态脚本文件(如PHP),他们可以利用该文件直接注入代码并执行,例如通过浏览器直接访问http://example.com/uploads/shell.php

文件上传与CSRF

  • 文件上传功能如果缺乏适当的CSRF保护,攻击者可以诱导受害者提交恶意上传请求,从而在服务器上上传恶意文件。

漏洞Code演示与修复

存在文件上传漏洞的代码

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;public class FileUploadServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Part filePart = request.getPart("file"); // 获取上传的文件String fileName = filePart.getSubmittedFileName();// 存储文件到服务器的目录File file = new File("/var/www/uploads/" + fileName);filePart.write(file.getAbsolutePath());response.getWriter().println("File uploaded successfully");}
}

漏洞分析

  • 没有验证文件类型和文件名,攻击者可以上传任意文件,如恶意脚本。
  • 文件直接存储在Web目录下,可能被直接访问和执行。

修复示例

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;public class SafeFileUploadServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {Part filePart = request.getPart("file");String fileName = filePart.getSubmittedFileName();// 1. 验证文件扩展名if (!fileName.endsWith(".jpg") && !fileName.endsWith(".png")) {response.getWriter().println("Invalid file type");return;}// 2. 生成随机文件名,避免文件覆盖和预测String safeFileName = System.currentTimeMillis() + "_" + fileName;// 3. 文件存储在Web目录之外File uploadDir = new File("/var/uploads/");if (!uploadDir.exists()) {uploadDir.mkdir();}File file = new File(uploadDir, safeFileName);filePart.write(file.getAbsolutePath());// 4. 设置文件权限为只读file.setReadable(true, true);file.setWritable(false, false);response.getWriter().println("File uploaded successfully");}
}

代码分析:

  1. 文件扩展名验证:只允许特定类型的文件(如.jpg.png)。
  2. 文件名随机化:使用时间戳生成唯一文件名,防止覆盖和预测。
  3. 文件存储在安全目录:避免直接存储在Web目录中,确保无法通过URL访问到文件。
  4. 权限设置:上传的文件被设置为只读,避免后续操作。

文件上传漏洞与其他常见漏洞的组合攻击

文件上传漏洞常常被攻击者用作攻击链中的一环。由于单一漏洞利用的效果可能有限,攻击者往往结合其他漏洞来扩大攻击影响范围,实现更高级的攻击目标。下面探讨几种常见的组合利用场景:

  • 路径穿越结合文件上传:绕过文件上传目录限制,访问或执行敏感位置的文件。
  • 远程代码执行(RCE)结合文件上传:通过上传并执行恶意文件实现远程控制。
  • 跨站脚本(XSS)结合文件上传:通过文件传播恶意脚本,跨站点执行攻击。
  • 跨站请求伪造(CSRF)结合文件上传:在不知情的情况下诱使用户上传恶意文件。

文件上传漏洞 + 路径穿越

攻击场景:绕过文件存储路径限制

在某些应用程序中,即使存在文件上传功能,文件通常会被限制在特定目录下,如/uploads,无法直接上传到服务器的关键目录。然而,结合路径穿越漏洞,攻击者可以通过构造恶意的文件路径来绕过这些限制,上传文件到敏感目录并执行恶意代码。

高级利用步骤

  1. 上传构造路径文件:攻击者上传文件时,在文件名中使用路径穿越符号,例如../../../../var/www/html/shell.php,尝试绕过目录限制。
  2. 利用路径穿越漏洞:服务器没有正确处理文件名或路径,导致文件实际存储在/var/www/html/目录中。
  3. 执行上传文件:通过URL直接访问http://example.com/shell.php,执行上传的PHP文件,从而进行远程代码执行。

防御措施

  • 严格验证文件路径,使用getCanonicalPath()检查文件的真实路径,防止路径穿越。
  • 限制上传目录,并确保该目录无执行权限。

文件上传漏洞 + 远程代码执行(RCE)漏洞

攻击场景:利用脚本文件上传实现RCE

最具破坏性的攻击之一是上传恶意脚本文件(如PHP、ASP或JSP文件),并通过直接访问这些文件来执行远程代码。文件上传漏洞允许上传任意类型的文件,而Web服务器将这些文件存储在可被Web访问的目录中,导致攻击者可以通过URL直接访问并执行这些文件。

高级利用步骤

  1. 上传恶意脚本文件:攻击者上传一个恶意的PHP脚本,如<?php system($_GET['cmd']); ?>,并将其存储在可访问的Web目录中。
  2. 触发代码执行:攻击者通过浏览器访问恶意文件并通过URL传递命令参数,如http://example.com/uploads/shell.php?cmd=whoami
  3. 获得服务器控制权:攻击者可以执行任何命令,获取服务器的敏感信息或进一步传播攻击。

防御措施

  • 禁止可执行脚本类型的文件上传,尤其是像.php.jsp.exe等危险文件。
  • 将上传目录设置为不可执行,防止服务器执行上传的文件。
  • 使用应用层的WAF(Web Application Firewall)过滤异常的请求模式。

文件上传漏洞 + 跨站脚本(XSS)

攻击场景:通过文件上传传播XSS攻击

攻击者可以通过上传包含恶意JavaScript代码的文件来进行XSS攻击。例如,攻击者上传一个包含恶意脚本的HTML文件或图片(通过伪装的文件名),并诱导其他用户访问该文件。浏览器解析这些文件时,可能执行其中的JavaScript代码,从而危害其他用户。

利用步骤

  1. 上传含有恶意脚本的文件:例如,攻击者上传一个伪装成图片的HTML文件,其中嵌入了恶意JavaScript,如<script>alert('XSS');</script>
  2. 诱导用户访问文件:攻击者通过诱骗手段,诱导其他用户访问此恶意文件的URL。
  3. 脚本执行:浏览器执行恶意JavaScript代码,导致用户的会话劫持、数据泄露或其他操作。

防御措施

  • 对上传文件的MIME类型进行严格校验,并使用内容检查工具确保文件的合法性。
  • 对上传文件名及其内容进行HTML转义,防止浏览器错误地解析文件中的恶意代码。

文件上传漏洞 + CSRF

攻击场景:利用CSRF强制上传恶意文件

跨站请求伪造(CSRF)攻击可以通过诱导用户在不知情的情况下上传恶意文件。例如,攻击者构造一个恶意链接或表单,诱骗受害者在登录状态下访问,从而自动触发文件上传请求,将恶意文件上传到服务器。

利用步骤

  1. 构造恶意表单:攻击者创建一个隐藏的表单,包含文件上传功能,并预置恶意文件(通过URL传递或base64编码等方式)。
  2. 诱导受害者点击:受害者在登录的情况下点击恶意链接或提交表单,不知不觉中上传恶意文件。
  3. 攻击者执行恶意文件:恶意文件被成功上传到服务器后,攻击者可以通过直接访问该文件进行进一步攻击。

防御措施

  • 为上传功能添加CSRF Token验证,确保上传请求只能由合法用户发起。
  • 限制文件上传功能的访问权限,只有经过授权的用户才能上传文件。
  • 结合验证码机制,确保用户交互的真实性,防止自动化攻击。

组合漏洞Code : 路径穿越与远程代码执行(RCE)

场景介绍

攻击场景:路径穿越与远程代码执行(RCE)的结合利用

攻击者上传恶意脚本文件(如PHP、JSP)并通过路径穿越漏洞将文件存放到Web服务器的可执行目录下,随后通过URL访问该恶意文件,实现远程代码执行,从而获得服务器控制权。


问题代码

这是一个存在文件上传漏洞路径穿越漏洞的示例代码,展示了如何利用这些漏洞进行攻击。

import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;@MultipartConfig
public class VulnerableFileUploadServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取上传文件的部分Part filePart = request.getPart("file");String fileName = filePart.getSubmittedFileName();// 路径穿越漏洞,攻击者可以通过文件名控制文件存储路径String uploadPath = "/var/www/uploads/" + fileName;// 将文件写入指定路径filePart.write(uploadPath);response.getWriter().println("File uploaded successfully to: " + uploadPath);}
}

漏洞分析

  • 路径穿越漏洞fileName来自用户的输入,未经过滤和验证,攻击者可以构造诸如../../webapps/ROOT/shell.jsp的文件名,从而将文件写入服务器的Web目录中。
  • 远程代码执行漏洞:上传恶意脚本文件后,攻击者可以通过URL直接访问该文件,从而执行恶意代码,例如http://example.com/shell.jsp

利用步骤

  1. 上传恶意文件:攻击者上传一个JSP文件(如shell.jsp),内容为:

    <%@ page import="java.io.*" %>
    <%String cmd = request.getParameter("cmd");Process p = Runtime.getRuntime().exec(cmd);OutputStream os = p.getOutputStream();InputStream in = p.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));String line = null;while ((line = reader.readLine()) != null) {out.println(line);}
    %>
    
  2. 路径穿越:上传的文件名为../../webapps/ROOT/shell.jsp,将文件存储到Tomcat服务器的Web可执行目录中。

  3. 远程执行命令:攻击者通过浏览器访问http://example.com/shell.jsp?cmd=whoami,远程执行命令并获得服务器权限。


防御措施

为了防止上述路径穿越与RCE漏洞,需要对代码进行修复和增强安全性:

修复代码

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;@MultipartConfig
public class SecureFileUploadServlet extends HttpServlet {private static final String UPLOAD_DIR = "/var/uploads/";@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 获取上传的文件部分Part filePart = request.getPart("file");String fileName = filePart.getSubmittedFileName();// 1. 验证文件名,防止路径穿越if (fileName.contains("..") || fileName.contains("/") || fileName.contains("\\")) {response.getWriter().println("Invalid file name.");return;}// 2. 验证文件类型,防止上传恶意脚本String mimeType = getServletContext().getMimeType(fileName);if (!isAllowedFileType(mimeType)) {response.getWriter().println("Invalid file type.");return;}// 3. 生成安全的文件名,避免文件名冲突和预测String safeFileName = System.currentTimeMillis() + "_" + fileName;// 4. 使用安全路径,将文件存储在不可执行的目录中Path uploadPath = Paths.get(UPLOAD_DIR + safeFileName);// 确保上传目录存在if (!Files.exists(uploadPath.getParent())) {Files.createDirectories(uploadPath.getParent());}// 将文件写入磁盘filePart.write(uploadPath.toString());response.getWriter().println("File uploaded successfully to: " + uploadPath);}private boolean isAllowedFileType(String mimeType) {return mimeType.equals("image/jpeg") || mimeType.equals("image/png") || mimeType.equals("application/pdf");}
}

防御措施分析

  1. 验证文件名:代码检查文件名是否包含路径穿越符号(如..),避免文件被上传到非预期目录。
  2. 文件类型验证:通过检查文件的MIME类型,确保只允许上传预期的文件类型,如图片或PDF,防止上传脚本文件。
  3. 文件名随机化:使用时间戳生成唯一文件名,避免文件覆盖和文件名预测攻击。
  4. 安全目录存储:将上传文件存储在不可执行的目录中,防止上传文件被直接执行。
  5. 限制文件访问:配置Web服务器禁止访问上传目录中的文件,或将上传目录存储在Web根目录之外。

详细说明

攻击原理

  • 路径穿越攻击:攻击者通过上传带有路径穿越符号的文件名(如../../webapps/ROOT/shell.jsp),将文件上传到服务器可执行目录中,从而获得远程执行权限。
  • 远程代码执行(RCE):上传的恶意文件是可执行脚本(如JSP),攻击者可以通过浏览器远程访问该文件并执行任意命令。

防御机制

  • 路径验证:通过检查文件名和路径,避免攻击者操控文件存储位置。
  • 文件类型限制:通过限制上传的文件类型,防止攻击者上传脚本文件。
  • 安全的文件存储:将上传文件存储在Web根目录之外,确保上传文件不会被直接访问和执行。
  • 文件权限设置:确保上传的文件目录没有执行权限,限制潜在的恶意操作。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/440167.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python中的机器学习:从入门到实战

机器学习是人工智能领域的一个重要分支&#xff0c;它通过构建模型来使计算机从数据中学习并做出预测或决策。Python凭借其丰富的库和强大的生态系统&#xff0c;成为了机器学习的首选语言。本文将从基础到实战&#xff0c;详细介绍如何使用Python进行机器学习&#xff0c;涵盖…

【汇编语言】寄存器(CPU工作原理)(二)—— 汇编指令的基础操作

文章目录 前言正文——&#xff08;一气呵成解决本文内容&#xff09;结语 前言 &#x1f4cc; 汇编语言是很多相关课程&#xff08;如数据结构、操作系统、微机原理&#xff09;的重要基础。但仅仅从课程的角度出发就太片面了&#xff0c;其实学习汇编语言可以深入理解计算机底…

Android Framework AMS(02)AMS启动及相关初始化5-8

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容过多&#xff0c;因此拆成2个章节&#xff0c;本章节是第二章节&…

LabVIEW提高开发效率技巧----使用动态事件

在LabVIEW开发过程中&#xff0c;用户交互行为可能是多样且不可预知的。为应对这些变化&#xff0c;使用动态事件是一种有效的策略。本文将从多个角度详细介绍动态事件的概念及其在LabVIEW开发中的应用技巧&#xff0c;并结合实际案例&#xff0c;说明如何通过动态事件提高程序…

Vector不清晰点学习易错点

什么是迭代器 是一个广义指针它可以是指针&#xff0c;也可以是一个可对其执行类似指针得操作-如解除引用&#xff08;如operator*()&#xff09;和递增&#xff08;operator()&#xff09;STL中每个容器类都定义了一个合适的迭代器&#xff0c;该迭代器的类型是一个名为itera…

【Python游戏开发】贪吃蛇游戏demo拓展

拓展上一项目【Python游戏开发】贪吃蛇 实现穿墙效果 # 检测游戏是否结束 def check_gameover():global finished# 移除蛇头位置超过窗口判断for n in range(len(body) - 1):if(body[n].x snake_head.x and body[n].y snake_head.y):finished True # 状态检测 def ch…

html5 + css3(下)

目录 CSS基础基础认识体验cssCSS引入方式 基础选择器选择器-标签选择器-类选择器-id选择器-通配符 字体和文本样式1.1 字体大小1.2 字体粗细1.3 字体样式&#xff08;是否倾斜&#xff09;1.4 常见字体系列&#xff08;了解&#xff09;1.5 字体系列拓展-层叠性font复合属性文本…

oh-crop: OpenHarmony/HarmonyOS上的简单的图片剪裁库,可用于头像剪裁等常见场景。

&#x1f4da; 简介 oh-crop: OpenHarmony/HarmonyOS上的简单的图片剪裁库&#xff0c;可用于头像剪裁等常见场景。 代码仓库&#xff1a;oh-crop &#x1f4da; 下载安装 ohpm i xinyansoft/oh-cropOpenHarmony ohpm 环境配置等更多内容&#xff0c;请参考: 下载安装三方库…

一个值得关注的3D生成新算法:速度和图像生成平齐,能生成合理的展开贴图和高质量mesh

今天跟大家介绍的GIMDiffusion是一种新的Text-to-3D模型&#xff0c;利用几何图像&#xff08;Geometry Images&#xff09;来高效地表示3D形状&#xff0c;避免了复杂的3D架构。通过结合现有的Text-to-Image模型如Stable Diffusion的2D先验知识&#xff0c;GIMDiffusion能够在…

【数据结构】【链表代码】相交链表

/*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/typedef struct ListNode ListNode; struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {//先求出两个链表的长度ListNode…

Unity 编辑器多开

开发多人联机的功能时大多数会遇到测试机不方便的问题。想多开同一个项目Uinty又禁止。。。因为在使用Unity Editor打开一个项目时&#xff0c;Unity Editor会在项目目录建立一个Temp目录&#xff0c;同时对里面的一个UnityLockfile文件进行加锁。SO...可以使用以下方法进行多开…

【easypoi 一对多导入解决方案】

easypoi 一对多导入解决方案 1.需求2.复现问题2.1校验时获取不到一对多中多的完整数据2.2控制台报错 Cannot add merged region B5:B7 to sheet because it overlaps with an existing merged region (B3:B5). 3.如何解决第二个问题处理&#xff1a; Cannot add merged region …

ISO IEC 18004 2015 PDF 文字版下载

ISO_IEC_18004_2015_en-US - 道客巴巴 (doc88.com)https://www.doc88.com/p-67816330893254.html

Kafka和RabbitMQ区别

RabbitMQ的消息延迟是微秒级&#xff0c;Kafka是毫秒级&#xff08;1毫秒1000微秒&#xff09; 延迟消息是指生产者发送消息发送消息后&#xff0c;不能立刻被消费者消费&#xff0c;需要等待指定的时间后才可以被消费。 Kafka的单机呑吐量是十万级&#xff0c;RabbitMQ是万级…

vSAN02:容错、存储策略、文件服务、快照与备份、iSCSI

目录 vSAN容错条带化存储策略1. 创建新策略2. 应用存储策略 vSAN文件服务文件服务快照与备份 vSAN iSCSI目标服务 vSAN容错 FTT&#xff1a;Fault to Tolerance 允许故障数 故障域&#xff1a;每一台vSAN主机是一个故障域 - 假设3台超融合&#xff08;3计算1存储&#xff09;&…

【Kubernetes】常见面试题汇总(五十四)

目录 120.创建 init C 容器后&#xff0c;其状态不正常&#xff1f; 特别说明&#xff1a; 题目 1-68 属于【Kubernetes】的常规概念题&#xff0c;即 “ 汇总&#xff08;一&#xff09;~&#xff08;二十二&#xff09;” 。 题目 69-113 属于【Kubernetes】的生产…

【Spring Boot 入门一】构建你的第一个Spring Boot应用

一、引言 在当今的软件开发领域&#xff0c;Java一直占据着重要的地位。而Spring Boot作为Spring框架的延伸&#xff0c;为Java开发者提供了一种更加便捷、高效的开发方式。它简化了Spring应用的搭建和配置过程&#xff0c;让开发者能够专注于业务逻辑的实现。无论是构建小型的…

Windows搭建RTMP服务器

这里写自定义目录标题 1 Nginx-RTMP服务器搭建1.1 下载Nginx1.2 下载Nginx的RTMP扩展包1.3 配置Nginx1.4 启动Nginx1.5 查看Nginx状态 2 FFmpeg推流2.1 下载FFmpeg2.2 配置FFmpeg环境变量2.3 验证FFmpeg配置 3 视频推流3.1 OBS推流3.2 FFmpeg推流 4 VLC拉流4.1 VLC4.2 打开网络…

4款专业电脑数据恢复软件,帮你保障数据安全。

电脑里面会出现的数据丢失场景有很多&#xff0c;像硬盘故障、回收站清空、电脑格式化、系统崩溃、病毒入侵等等&#xff1b;如果发现数据丢失后&#xff0c;建议应停止使用电脑&#xff0c;避免新的数据写入覆盖丢失的数据。然后再尝试进行数据找回&#xff0c;如果想自己进行…

合肥企业参访:走进联想合肥智能制造基地参观学习

跟随华研标杆游学高丽华高老师去到联想参观游学 联想合肥智能制造基地成立于2011年&#xff0c;是联想集团全球蕞大的PC研发和制造基地&#xff0c;也是智能制造示范基地。基地占地约500亩&#xff0c;拥有全球PC制造业蕞大的单体厂房以及业界主板、整机生产线。在这里&#xf…