当前位置: 首页 > news >正文

漏洞解析--文件包含漏洞究竟怎么用?

一、漏洞原理

1.1 核心

文件包含漏洞是指程序中需要包含其他文件(代码,信息等等),然而包含文件的路径受用户输入控制,攻击者可以使其包含恶意文件,从而造成敏感信息泄露甚至任意代码执行。分为两类:

  • 本地文件包含(LFI, Local File Inclusion):攻击者能够让程序包含服务器本地文件(例如配置、日志、源码等)。
  • 远程文件包含(RFI, Remote File Inclusion):程序支持包含远程位置的文件(通过 HTTP/FTP 等协议),可理解为可访问互联网上的内容,攻击者可能引入远程代码。

核心风险来自:被包含文件路径用户可控。

1.2 原理详解

文件包含有两个条件:

  1. 包含/读取:应用调用语言/框架的读取或包含函数(例如 PHP 的 include/require、Python 的 open/importlib、Node 的 fs.readFile/require 等)。
  2. 路径用户可控:用户可通过修改url参数等方法控制被包含的文件路径。
    达到这两个条件之后,文件包含漏洞就形成了。如果被包含文件不被解析执行,那么会造成敏感信息泄露。如果被包含文件被解析执行了,那么就会造成任意代码执行。

1.3 小例子

不安全示例

// vulnerable.php — 示例
$page = $_GET['page'];      // 用户可控输入
include "/var/www/html/pages/" . $page;  // 直接拼接包含

那么我通过GET方法访问 https://xxx.com/path/vulnerable.php?page=file_name 就可以访问执行任意文件。当然,前提是你知道对应文件路径(不知道的情况在2.2中说明)。

安全示例

// safer.php 
$allowed = ['home' => '/var/www/html/pages/home.php','about' => '/var/www/html/pages/about.php',
];$page = $_GET['page'] ?? 'home';
if (!array_key_exists($page, $allowed)) {// 返回 404 或默认页http_response_code(404);exit('Not found');
}// 使用白名单映射,避免直接拼接用户输入
include $allowed[$page];

这里使用白名单,避免了文件路径用户完全可控,就不造成文件包含漏洞了。推荐使用白名单而非黑名单。

二、检测与危害

2.1 检测方法

主要介绍人工检测方式而非工具使用。不仅是文件包含漏洞,文件读取漏洞也可以参考以下测试方法。

2.1.1 黑盒测试

  1. 找到对应接口/功能点

    • 浏览应用页面与接口,着重关注那些接受“文件名、路径、模块、模板、页名、lang/theme、download、view”等参数的请求。
    • 关注文件上传、文件查看、日志下载、动态模板选择、插件/主题加载、日志查看器等功能面,这类功能常与文件路径相关联。
    • 记录每个入口的请求方法(GET/POST/头/表单/JSON)、参数名与参数位置(查询串、路径段、请求体、Headers、Cookies)。
  2. 构造输入类别并逐类测试
    本步骤致力于发现是本地/远程文件包含,是否支持目录穿越,是否支持各种协议。对每一种变体,都要对比并记录:HTTP 状态码、返回体长度、响应头(Content-Type、Server、X-Powered-By 等)、页面内容差异与错误信息(堆栈、路径展示等)。

    • 基础路径变体:提交看起来像文件/路径的字符串并观察是否有文件内容回显或与正常页面不同的错误/响应体(比如部分源码、配置项、路径错误信息等)。
    • 目录穿越类变体:提交会导致解析为非预期目录的变体(包括编码变体、不同分隔符等),观察是否能访问应用根目录外的资源(用响应差异做推断)。
    • 远程/协议类变体:尝试用不同的协议标识(本地 scheme、远程 scheme 等)作为输入,观察应用是否尝试从外部获取资源或返回外部资源的内容(以判断是否允许远程包含)。
    • 特殊文件类型变体:提交类似配置、日志或常见资源名的输入(按应用上下文判断),观察是否有信息泄露迹象。
    • 协议测试:测试http/https, gopher, file, ftp, php协议等等,表见4.3
  3. 识别包含 vs 读取的迹象

    • 直接内容回显:响应中出现了非预期的文本片段(例如源码片段、配置项、版本信息) → 可能存在文件读取/包含。
    • 错误/堆栈信息泄露:响应中包含文件系统路径、函数名或错误堆栈 → 程序在尝试访问文件并抛出异常,可能可被进一步利用或用于确认存在漏洞。
    • 行为差异:对同一入口提交不同类别输入导致明显不同的响应(例如不同的 HTTP 头、长短、定制错误页面)→ 表明服务器在对输入进行路径解析或文件操作。
    • 外部依赖表现:在尝试“远程”类别时,如果出现网络延迟、外部错误或返回的内容明显来源于外部 → 说明应用可能支持从外部载入资源。

2.1.2 代码审计

  1. 必要条件审查

    • 查找所有与包含/读取相关的 API 调用(例如 PHP 的 include/require/require_once/include_once,Node 的 fs.readFile/require,Python 的 open/importlib 等)。
    • 追踪这些调用处传入的变量来源(是否直接来源用户输入或受外部影响)。
    • 检查是否存在缺乏白名单、路径规范化或权限检查的路径拼接。
  2. 配置审查

    • 检查运行时配置,是否允许远程包含(例如老式 PHP allow_url_include)或是否将可写目录暴露给 web 进程。
    • 审核文件/目录权限,避免 web 进程能够读写敏感路径。

2.2 利用与危害

  1. 信息泄露:被包含文件的内容可能包含密钥、配置、数据库凭据或源码注释等敏感信息;
  2. 代码执行:如果应用将包含当作可执行脚本(例如 PHP include),并且攻击者能控制被包含文件的内容(或者包含远程可执行代码),可能导致远程代码执行(RCE);
  3. 链式攻击:文件包含常与目录穿越、文件上传、日志注入等漏洞连用,放大影响。尤其是文件上传,可以通过文件上传上传一个图片马并得到对应路径,之后使用文件包含漏洞包含图片马,图片马被解析之后就可以进行远程代码执行。

三、修复与绕过

3.1 修复方式

  1. 白名单优先

    • 最可靠的做法是把可包含的文件限定为一份显式映射(例如键名 -> 绝对路径),不要直接使用用户输入作为路径部分。
  2. 路径规范化与根目录约束

    • 在接受路径前先做规范化(例如解析绝对路径),然后验证该路径确实位于允许的根目录之下。对于存在符号链接的文件系统,考虑解析真实路径(realpath)再验证。
  3. 禁用远程包含

    • 在运行时或应用配置中禁止包含远程 URL(如PHP)。
  4. 协议控制

    • 禁用用不到的协议,比如gopher, php协议等
  5. 最小权限原则

    • Web 进程仅对其运行所需的文件与目录拥有读取/写入权限;配置文件、密钥、私有证书等应尽可能放在 web 用户不可直接访问的目录,并对访问做好权限控制。

3.2 绕过技巧

  1. 输入混淆:对于黑名单的防御手段。可以尝试通过 URL 编码、双重编码、大小写混淆或使用不同路径分隔符来绕过简单的字符串比较。
  2. %00截断:对于php搭建的网站且php版本小于5.3,可以尝试%00截断,例如
 <?php$file=$_GET['file'];include($file.".html");?>

可以使用https://xxx.com/path/vul.php?file=xxx.php%00 这样后面的.html就会被舍弃了,相当于直接访问xxx.php
3. http/https截断:对于http/https协议,可以用?进行截断,例如

 <?php$file=$_GET['file'];include($file.".html");?>

可以使用https://xxx.com/path/vul.php?file=https://xxx.com/xxx.php? 这样后面的.html就会被舍弃了,相当于直接访问https://xxx.com/xxx.php

四、补充说明

4.1 Windows / Linux 敏感路径

4.1.1 windows

C:\boot.ini                          // 查看系统启动配置(Windows XP/旧版相关)
C:\Windows\System32\config\SAM       // 本地账号数据库(含离线哈希)
C:\Windows\System32\config\security  // 本地安全策略、凭据相关
C:\Windows\System32\config\software  // 注册表备份(系统/软件配置)
C:\Windows\System32\config\system    // 注册表系统分支(系统配置)
C:\Windows\repair\SAM                // 系统安装相关的凭据备份(历史/备份)
C:\Windows\repair\System             // 系统备份文件
C:\Windows\php.ini                    // PHP 全局配置(若在 Windows 上安装 PHP)
C:\inetpub\wwwroot\web.config         // IIS 网站配置(站点设置、连接字符串等)
C:\windows\system32\inetsrv\MetaBase.xml // IIS(旧版)配置存储
C:\Program Files\MySQL\MySQL Server X.Y\my.ini  // MySQL 配置(Windows 默认安装路径示例)
C:\Program Files\MySQL\MySQL Server X.Y\data\mysql\user.MYD // MySQL 用户表文件(可能含密码相关信息,视引擎而定)
C:\Users\<用户名>\.ssh\id_rsa         // 用户 SSH 私钥(若存在)
C:\Users\<用户名>\.aws\credentials    // AWS CLI 本地凭证(若配置)
C:\Users\<用户名>\AppData\Roaming\    // 应用配置/凭证(例如浏览器/客户端本地存储)
C:\ProgramData\Docker\config\daemon.json // Docker 配置(含可能敏感配置)
C:\ProgramData\Jenkins\.ssh\          // CI/工具相关凭证目录(视安装而定)
C:\inetpub\wwwroot\.env               // 应用环境文件(若被放置于 webroot,含密钥/凭据)
C:\inetpub\wwwroot\.git\              // 源码仓库裸露(会泄露历史与配置)

4.1.2 Linux

/etc/passwd                           // 用户账户列表(不含哈希)
/etc/shadow                           // 密码哈希(非常敏感)
/etc/sudoers                          // sudo 权限配置
/etc/ssh/sshd_config                  // SSH 服务配置(访问控制相关)
/root/.ssh/id_rsa                     // root SSH 私钥(极敏感)
/home/<user>/.ssh/id_rsa              // 用户 SSH 私钥
/etc/ssh/ssh_config                   // SSH 客户端/服务配置
/etc/ssh/authorized_keys              // 授权密钥列表(可直接登录的公钥)
/etc/ssl/private/                     // TLS/SSL 私钥存放目录(视发行版)
/etc/ssl/certs/                       // 证书目录
/etc/nginx/nginx.conf                 // Nginx 主配置
/etc/nginx/sites-enabled/             // Nginx 虚拟主机配置(站点明细)
/etc/httpd/conf/httpd.conf            // Apache 主配置(RHEL/CentOS 路径)
/etc/apache2/apache2.conf             // Apache 主配置(Debian/Ubuntu 路径)
/etc/apache2/sites-enabled/           // Apache 虚拟主机配置
/etc/php.ini                          // PHP 全局配置
/var/www/html/                        // 默认 webroot(可能包含源码、配置或上传文件)
/srv/www/                             // 其它常见 web 根目录
/var/log/                             // 系统与服务日志(auth.log、syslog、messages 等)
/var/log/nginx/                       // Nginx 访问/错误日志(可能含敏感请求)
/var/log/apache2/                     // Apache 日志目录
/var/log/auth.log                     // 认证相关日志(可能含尝试/错误信息) 
/var/lib/mysql/                        // MySQL 数据文件目录(含 .ibd/.MYD/.MYI 等)
/etc/mysql/my.cnf                      // MySQL 配置(或 /etc/my.cnf,视发行版)
/var/lib/postgresql/                   // PostgreSQL 数据目录
/var/www/.env                          // 应用环境变量文件(若放在 webroot,含 DB/API 密钥)
/tmp/                                  // 临时目录(可利用作写入-包含链)
/var/tmp/                              // 临时目录(可能长期存在的临时文件)
/root/.bash_history                    // root 命令历史(可能含密码/敏感命令)
/home/*/.bash_history                  // 用户命令历史(可能含敏感信息)
/etc/letsencrypt/live/<domain>/privkey.pem // Let's Encrypt 私钥(如果存在)
/etc/kubernetes/admin.conf             // kubeconfig 管理凭证(Kubernetes 环境)
/var/lib/docker/volumes/               // Docker 卷(可能包含持久化数据)
/var/run/docker.sock                   // Docker socket(对容器管理极敏感)
/etc/systemd/system/                   // 自定义 systemd 服务(含运行命令/参数)
/opt/<app>/config/                     // 第三方/自定义应用配置目录(视部署而定)
/backup/ or /var/backups/              // 备份存放位置(备份含历史配置/数据)

4.2 PHP协议用法

协议 测试PHP版本 allow_url_fopen allow_url_include 用法
file:// >=5.2 off/on off/on ?file=file://D:/soft/phpStudy/WWW/64/phpcode.txt
php://filter >=5.2 off/on off/on ?file=php://filter/read=convert.base64-encode/resource=/index.php
php://input >=5.2 off/on on ?file=php://input 【POST DATA <php phpinfo();?>】
zip:// >=5.2 off/on off/on ?file=zip://D:/soft/phpStudy/WWW/file.zip%23phpcode.txt
compress.bzip2:// >=5.2 off/on off/on ?file=compress.bzip2://D:/soft/phpStudy/WWW/file.bz2
【or】
?file=compress.bzip2://file.bz2
compress.zlib:// >=5.2 off/on off/on ?file=compress.zlib://D:/soft/phpStudy/WWW/file.gz
【or】
?file=compress.zlib://file.gz
data:// >=5.2 on on ?file=data://text/plain,<php phpinfo();?>
【or】
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
也可以:
?file=data:text/plain,<php phpinfo();?>
【or】
?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

4.3 各协议介绍表

协议 / Wrapper 描述(用途) 常见于 LFI / RFI 潜在影响(安全角度) 备注 / 防御要点
file:// 直接指定本地文件系统路径的 scheme。 LFI 主体(读取本地文件) 信息泄露(本地敏感文件可被读取) 验证路径、使用白名单、限制根目录;注意符号链接。
http:// / https:// 通过 HTTP(S) 从远程服务器获取资源。 RFI(远程包含) 可导致远程代码注入/执行(若服务端执行包含内容)或泄露远程文件内容 禁用远程包含(如 PHP 的 allow_url_include),限制出站访问,使用网络隔离。
ftp:// / ftps:// 通过 FTP(S) 协议获取远程文件。 RFI(远程包含) 与 HTTP 类似,可能引入远程代码或泄露 禁用或限制外部协议访问;关闭未使用的传输扩展。
gopher:// 古老协议,可发送任意字节流(历史上用于绕过某些过滤器以触发远程命令/行为)。 RFI(历史上常被滥用作探测/链式利用) 可用于触发特殊网络行为或与服务交互,提升利用场景复杂性 防御时应阻断对非必要协议的访问;在网络层过滤出站协议。
data: 数据 URI,用于内联小型数据(Base64/URL 编码)。 RFI/LFI 视实现而定 可内联代码或内容,若被包含并解释可能导致执行或注入 阻断 data 协议解析,或者在文件包含逻辑中明确拒绝含有 : 的输入。
php://(PHP 专用 wrapper) PHP 内置多种 stream wrapper(php://filter、php://input、php://memory 等)。 LFI 相关(特别是 php://filter 用于读取源码/绕过保护) 可导致源码泄露、从输入流读取内容或间接读出敏感信息 在 PHP 中禁用远程包含;对包含字符串做严格白名单;审查是否需要 php://* 功能。
php://filter 可对流应用过滤器(例如 base64 编码输出),历史上用于将 PHP 源码编码后泄露。 LFI(源码泄露场景) 源码泄露、敏感信息暴露 防护同上;限制可包含的文件类型与路径。
php://input 访问原始 POST 数据流(可用于某些上下文读取请求体)。 LFI 辅助 可在特定条件下配合其他漏洞造成影响 在包含逻辑中拒绝非文件路径的 wrapper。
phar:// PHP 的打包/归档访问 wrapper,可访问 phar 包内文件。 LFI(若应用解析 phar metadata) 在特定条件下可触发对象反序列化或其它意外行为 更新 PHP 版本;限制可读目录并检查上传内容。
zip:// / compress.zlib:// 等归档/压缩 wrapper 用于访问压缩包内文件或压缩流。 LFI(在支持的环境下) 可引导读取压缩包内敏感文件 防止未授权上传或包含压缩内容;验证文件来源。
expect://(PHP) 可执行外部命令并把结果作为流返回(需 expect 扩展)。 RFI/LFI(极危险) 可导致命令执行(RCE) 禁用相关扩展;彻底拒绝可执行类 wrapper。
smb:// / smbs:// / sftp:// / ssh2.sftp:// 通过网络文件共享(SMB、SFTP 等)访问远程文件。 RFI(远程包含) 远程代码/内容引入或敏感文件读取 网络层限制对内部/外部文件共享的访问;最小化跨网段访问权限。
data:(重复说明) (见上)
其它自定义或扩展 wrapper 例如语言/平台或扩展新增的 stream wrapper 视情况而定 取决于 wrapper 的行为(可读取、执行、反序列化等) 在依赖库/扩展中审查可用 wrapper 列表并禁用不必要的扩展。

感谢阅读,有问题欢迎评论。

相关文章:

漏洞解析--文件包含漏洞究竟怎么用?

一、漏洞原理 1.1 核心 文件包含漏洞是指程序中需要包含其他文件(代码,信息等等),然而包含文件的路径受用户输入控制,攻击者可以使其包含恶意文件,从而造成敏感信息泄露甚至任意代码执行。分为两类:本地文件包含(LFI, Local File Inclusion):攻击者能够让程序包含服务…...

办公室装修 暂存

办公室装修 暂存本文来自博客园,作者:del88,转载请注明原文链接:https://www.cnblogs.com/del88/p/19088481...

博客更新公告

来看看博客更新公告吧rt. 公示最新更新或发布的博客, 供大家查阅. 更新日志 Upd 2025.9.12 新随笔 Words to be remembered 2025.9.12 我好想你. 网址: https://www.cnblogs.com/hsy8116/p/19088430.Upd 2025.8.24 博客 初中这三年 已经更新, 在最后添加了对初中三年整体的评价…...

爆:GitHub Copilot支持包括Anthropic、Azure、Google Gemini、Groq、OpenAI 和 OpenRouter等供应商API

爆:GitHub Copilot支持包括Anthropic、Azure、Google Gemini、Groq、OpenAI 和 OpenRouter等供应商APIJetBrains和Xcode现已支持自带API密钥(BYOK)使用GitHub Copilot Chat,支持Anthropic、Azure等主流AI提供商。用户可灵活选择模型,享受更好的控制和实验体验。安装最新插件…...

JavaWeb05 - 详解

JavaWeb05 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !important; font-size: 14px !…...

CF182C

根据贪心策略,应当选择 \(k\) 个最小的负数改为正数,或选择 \(k\) 个最大的正数改为负数,才可能使答案最大。那么可以先把数按正负分开,并确定每个数在同符号数中的排名。建立权值线段树,记录每个数出现的次数、单个数大小、总贡献和,查询时类似线段树二分,如果数值较大…...

CF185D

大胆猜测,所有数的最大公约数一定很小:偶数时为 \(1\),奇数时为 \(2\)。设两个正整数 \(n,m\) 且 \(n<m\),最大公约数 \(\gcd(k^{2^n}+1,k^{2^m}+1)=d\),则有 \(k^{2^n}\equiv k^{2^m} \equiv -1\pmod d,k^{2^{n+1}} \equiv (k^{2^{n+1}})^{\frac{2^m}{2^{n+1}}} \equi…...

Python计算文件md5

Python计算文件md5 基础版本1 import hashlib2 3 def calculate_md5(file_path, chunk_size=8192):4 """5 计算大文件的MD5值6 7 Args:8 file_path (str): 文件路径9 chunk_size (int): 每次读取的字节数,默认8KB 10 11 …...

CF201C

最优的方案应该是先往一个方向走,然后走回来,再往另一个方向走不回来。考虑用 dp 模拟这个过程。设 \(f_{i,0/1}\) 表示从第 \(i\) 个点出发往左走,不一定/一定回到 \(i\) 号点的最大次数,则有转移: \[\begin{array}{l} f_{i,1}=f_{i-1,1}+a_{i-1}-[2 \nmid a_{i-1}]\\f_{…...

CF1774D

首先 \(1\) 的总个数不能被 \(n\) 整除时无解。 否则一定有解(因为每一列上的 \(1\) 的位置都可以随意变动,故实际上相当于可以随便放)。为了步数最少,一定是用缺少 \(1\) 行的 \(0\) 与过多 \(1\) 行的 \(1\) 交换,这样能同时使两行更接近答案。实现时先枚举列,再根据每…...

CF23C

挺神奇的思维题。 首先将所有元素按 \(a\) 从大到小排序,考虑交叉选,即要么 \(a_1,a_3,a_5,\cdots,a_{2n-1}\),要么 \(a_1,a_2,a_4,\cdots,a_{2n-2}\)。无论选哪种,\(a\) 一定满足要求(前者 \(a_1>a_2,a_3>a_4,\cdots,a_{2n-3}>a_{2n-2}\),各式相加即可,后者 \…...

CF37C

将每个 01 串看作一个二进制数,将长度从小到大排序,对于当前第 \(i\) 个串,首先在第 \(i-1\) 个串的基础上加 \(1\)(如果不能加 \(1\) 即爆位数则无解),如果长度相同则无需任何操作,否则按照缺少的长度从后面补 \(0\)。这样做能保证长度短的不为长度长的前缀,且尽可能的…...

CF33D

由于任意两个圆没有交点,故不存在翻一次栅栏能穿过两个圆。那么对于每个栅栏,如果两个点一个在内一个在外,则必须翻,否则不用翻。时间复杂度 \(O(mk)\),可以通过。 #include<iostream> #include<cstdio> #include<algorithm> #include<map> #defi…...

支持类 Unix 语法 ``:Windows 下用 PowerShell 7 优化 npm 和 VS Code

不支持 && ? 在类 Unix 系统中,&& 是常用的命令组合符,表示 前一个命令成功后再执行下一个命令。例如: echo "第一步成功" && echo "第二步执行"在 Windows 的默认环境中,cmd 或旧版 PowerShell 对 && 支持有限,可能…...

初赛程序阅读做题要点

草稿纸打清楚 同一时间的变量尽量打在一行 遇到循环要标好循环节 递归树,加入记忆化搜索想法,打表存储...

模拟堆(手写堆 的五大操作)

先看手写堆的相关问题:堆排序(手写堆) 五大操作: 例题: 输入样例:8 I -10 PM I -10 D 1 C 2 8 I 6 PM DM期望输出:-10 6代码实现:#include<bits/stdc++.h> using namespace std;const int N =1e5+10; int h[N]; int n,size; int ph[N],hp[N];void hswap(int a,in…...

【A】杂题悬桨

[ARC199A] Flip Row or Col 2...

使用Osquery进行远程取证:NTFS取证扩展实战指南

本文详细介绍了如何利用osquery的NTFS取证扩展进行远程数字取证分析,包括时间戳攻击检测、删除文件痕迹追踪等实战场景,为安全分析师提供高效端点调查方案。使用Osquery进行远程取证 - Trail of Bits博客 系统管理员使用osquery进行端点遥测和日常监控,安全威胁猎人用它发现…...

完整教程:简单介绍一下Clickhouse及其引擎

完整教程:简单介绍一下Clickhouse及其引擎pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", monospace !impo…...

矩阵分解

LU 分解 考虑将 \(A\) 分解成 \(LU\),\(L\) 为上三角矩阵,\(U\) 为下三角矩阵。 利用矩阵经典性质 \(|A|=|L||U|\),可以轻易算出 \(det(A)\)。 考虑 \(A_{i,j}=\gcd(i,j)\),一个经典性质是 \(\sum_{d|n} \phi(d)=n\),那么设 \(L_{i,j}=[j|i]\),\(U_{i,j}=[i|j]\phi(i)\)。…...

第一周个人作业

我叫张司靓,第一次在博客园写随笔,就跟大家聊聊我自己,还有对接下来学习的想法,想到哪儿说到哪儿,主打一个真实~ 一、先跟大家唠唠我自己我的日常小爱好 我平时没事就爱追剧,玩游戏,举个具体的例子:之前出的莲花楼,我已经n刷了,但每次看到大结局的时候都给我哭的死去…...

基于 Gitlab 实现 Go 的 CI/CD

# 定义流水线的几个阶段 stages:- lint- test- build- docker- deploy# 定义所有 job 的默认环境变量 variables:GO111MODULE: "on"CGO_ENABLED: "0"GOPROXY: "https://goproxy.cn,direct"# 代码静态检查 lint: # 这是 job 的…...

2025.9.11

2025.9.11讲的网络流 1.早读 P13925 [POKATT 2024] 联合猫国 / The Paw-litical Game 感觉好像在哪见过这道题,但是我不会 其实是个 \(dp\) (复杂度对吗?) 就是设 \(f[i]\) 表示考虑前 \(i\) 个最少变成几个 转移就是枚举最后一个合法状态 复杂度是 \(\sum i\) 结尾合法状态…...

容斥原理

1. 定义 有N个集合,称为 S[1],s[2]...s[n] ,则这N个集合的并集为假如有N个毫不相干的约束条件,那么可以将所有满足某个约束条件的状态看作一个集合,这样用容斥原理就可以很轻松地求出所有满足至少一个约束条件的状态总数 2. 题目 洛谷P1287 盒子与球 https://www.luogu.com…...

【B】世良真纯

...

如何使用jobleap.cn避免简历中的严重错误

如何使用jobleap.cn避免简历中的严重错误在求职竞争激烈的今天,一份优质且无误的简历至关重要。许多优秀人才因简历中的细节错误被招聘人员淘汰,但这完全可以避免。jobleap.cn作为专业的人才服务平台,致力于帮助您精准优化简历,提升面试通过率,让您在第一轮筛选中脱颖而出…...

在 Zustand 中创建通用 Action 的优雅实践

为何需要通用 Action? 在 Zustand 状态管理库中,开发者常常需要为状态对象的每个字段单独编写更新函数。然而,随着状态结构的复杂化,这种方式会导致代码冗余,维护成本增加。例如: updateName: (name) => set(() => ({ name })), updateAge: (age) => set(() =&g…...

如何用产品思维优化简历的“用户体验”?

如何用产品思维优化简历的“用户体验”?用产品思维优化简历的用户体验,关键在于让你的简历更符合招聘需求,更易被HR快速理解和认可。简历就像产品,目标用户是HR和用人主管,需求来自职位描述,设计要简单、清晰、兼容多场景,信息需要精准量化。jobleap.cn 是专注于职业发展…...

简历如何优化,简历如何投递,面试如何准备?

简历如何优化,简历如何投递,面试如何准备?简历模板建议简洁,突出关键信息,避免花哨。格式请统一用PDF,防止样式错乱。技术岗位一般不建议贴照片。简历文件名规范为“姓名_学历_岗位_手机号”,这样更专业且便于识别。学历是优势,尤其是名校毕业,可以自信标注;工作经验…...

网络流做题笔记

P3227 [HNOI2013] 切糕 考虑最小割。 对于一个坐标上的点只能选择一个 \(z\) 坐标,将 \(z\) 坐标的费用作为流量顺次连接。 第二个限制条件,先去绝对值,枚举较大值。 再限制较小值,不能小于 \(z-D\),从 \((x,y,z)\) 向 \((x,y,z-D)\) 连 \(inf\) 即可。 方格取数问题 相邻…...

简历优化全攻略:如何写出吸引HR的简历?

简历优化全攻略:如何写出吸引HR的简历?在求职过程中,简历是敲开面试大门的关键。本攻略从准备、写作到完善,教你系统优化简历内容,提高求职成功率。在求职过程中,简历是敲开面试大门的关键。本攻略从准备、写作到完善,教你系统优化简历内容,提高求职成功率。 1. 写简历…...

重塑云上 AI 应用“运行时”,函数计算进化之路

答案是,远未准备好。无论是被誉为“云原生操作系统”的 Kubernetes,还是被看作“终极形态”的无服务器(Serverless),在面对 AI 应用时都暴露出了深刻的架构失配。作者:世如 引言:AI 应用的“电器时代”与运行时的“隐形枷锁” 阿里云王坚博士曾不止一次的强调云计算的核…...

25.9.12 C语言基本数据类型

预备知识 A、1 字节(byte)=8 比特(bit) 1个比特即为1个二进制位数 B、%d 按有符号十进制整型数打印 %6d 按十进制整型数打印,至少6个字符宽(指输出的最后一个字符距行首为六字符)如:xxx123 %f 按浮点数打印(默认为小数点后6位) %6f按浮点数打印,至少6个字符宽 %06f 按…...

Avalonia:基础导航

Avalonia本身就可以实现导航功能,在主页面放置 TransitioningContentControl 控件,把它绑定到ViewModel 中的一个属性上 ViewModelBase? _currentPage;,通过更新这个属性实现导航。 我们先建二个ViewModel,一个是ColorsViewModel,一个是AboutViewModel。 using Avalonia.D…...

bashrc的一些配置记录

linux-Ubuntu22.04的bashrc在配置cuda的时候还需要配置以下内容:export PATH=/usr/local/cuda/bin:$PATH export CUDA_HOME=/usr/local/cuda export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/cuda/lib64 export…...

H5游戏性能优化系列-----协议相关优化

H5通讯协议这一块儿最长将的搭配应该是WebSocket+Protobuf这种模式吧,本篇就聊一下protobuf相关的优化。 Protobuf基本流程导入protobuf库 一般是后端定义协议文件,xxx.proto 现在的引擎都是要求写Ts文件的,所以要生成协议类的.d.ts,这样写协议处理时才有代码提示 直接加载…...

实现我的第一个langchain应用

这里我使用了科大讯飞的免费大模型来尝试 最简的应用 from langchain_community.chat_models import ChatOpenAI from langchain.schema import HumanMessagellm = ChatOpenAI(model_name="xop3qwen1b7", # 模型名称openai_api_base="https://maas-api.cn-huab…...

小说可视化系统设计(程序员副业项目)

https://blog.csdn.net/qq_33002279/article/details/151620553本文来自博客园踩坑狭,作者:韩若明瞳,转载请注明原文链接:https://www.cnblogs.com/han-guang-xue/p/19088351...

MyEMS与开源浪潮:如何重塑全球能源管理的未来格局

在气候变化与数字化转型的双重时代背景下,能源管理已从一项辅助性工作跃升为企业战略的核心。传统的、封闭的、昂贵的商业软件解决方案曾主导这一领域,但如今,一股由开源引领的变革浪潮正以前所未有的力量冲击着旧有格局。在这股浪潮之巅,MyEMS 作为一个全功能的开源能源管…...

React Antd or Antd Pro:findDOMNode is deprecated and will be removed in the next major release.

(旧项目)我一开始用的react:18.3.0, antd:5.21.1, ant-design/pro-components:2.7.19 (1)antd更新日志关于修复这个问题的最新一版是在2024/05/19的5.17.3版本(查询于2025/09/12)而且也是部分修复antd更新日志:https://ant-design.antgroup.com/changelog-cn(2)在 Pro…...

单板挑战4路YOLOv8!米尔瑞芯微RK3576开发板性能实测

在科技飞速发展的当下,人工智能与边缘计算的融合正以前所未有的速度重塑着我们的生活。RK3576芯片拥有4核Cortex-A72以及4核Cortex-A53提供基础算力,6TOPS算力NPU来模型推导运算。使用YOLOv8模型时也是手到擒来,接下来随着步伐看看它表现如何。 YOLO简介 YOLO(You Only Loo…...

doms.ul.querySelectorvs document.querySelector:DOM查询的层级关系

在JavaScript DOM操作中,doms.ul.querySelector和 document.querySelector都是用于查找元素的方法,但它们有重要的区别。让我详细解释它们的关系和差异。 核心区别特性document.querySelectorelement.querySelector​​搜索范围​​整个文档仅限于调用元素的子元素​​执行效…...

穿越钱塘江:一条高铁隧道背后的技术挑战

​2025年9月10日,中铁四局二公司杭州机场高铁站前5标柯桥制梁场首榀箱梁顺利浇筑,标志着铁路箱梁预制施工正式拉开序幕,工程建设全面进入实体施工新阶段。 ▲现场图片(图源:越牛新闻)这一节点不仅意味着杭州机场高铁在土建施工上实现关键突破,也为后续线路铺轨、站房建设…...

Pwn2Own Automotive 2025 决赛日:49个零日漏洞与88万美元奖金揭晓

本文详细记录了Pwn2Own Automotive 2025第三日决赛战况,涵盖ChargePoint/Sony/Autel等品牌设备漏洞利用细节,包括整数溢出、缓冲区溢出、命令注入等技术细节,最终累计颁发88.6万美元奖金。第三天最终战果 欢迎来到Pwn2Own Automotive 2025的第三个也是最后一个比赛日。过去两…...

9.HPA与VPA

HPA 与 VPA ​ 在前面的学习中我们使用了一个 kubectl scale 命令可以来实现 Pod 的扩缩容功能,但是这个是完全手动操作的,要应对线上的各种复杂情况,我们需要能够做到自动化去感知业务,来自动进行扩缩容。为此,Kubernetes 也为我们提供了这样的一个资源对象:Horizontal …...

MyEMS在行动:揭秘开源能源管理系统如何重塑工业与楼宇的能效未来

当“节能降耗”从一个口号变为一项关乎企业生存与发展的关键指标时,背后的管理工具便成为了决胜因素。Across the globe, 从德国的智能工厂到中国的绿色数据中心,一款名为MyEMS的开源系统正在悄然推动一场静悄悄的能源效率革命。 本文将通过场景化的视角,深入剖析MyEMS在不同…...

题解:P14015 [ICPC 2024 Nanjing R] 生日礼物

更差的阅读体验经典套路,我个人认为是橙题。 相邻相等不好刻画,我们直接把偶数位置反转,这样一组相邻相等中恰好有一个被反转,变成删除相邻不同。 那么假设没有 \(2\),最终序列中一定只有 \(0\) 或 \(1\)。所以假设 \(0,1\) 个数分别是 \(c_0, c_1\),那么由于一次消除一个…...

吻得太逼真

无论怎么讲我都觉得虚伪 陪伴你那么久你说是受罪 从前到现在当我是谁 你这花心蝴蝶 昨夜陪你醉伤到我心碎 你竟说我和你不配 完全忘记往日为何 能与我彻夜缠绵 和你吻吻吻吻吻 你吻得太逼真 让我把虚情假意 当作最真心的亲吻 怪自己来不及区分 你对我是酷爱是敷衍 我想问问问问…...

HyperWorks许可回收机制

随着企业业务的不断发展和工程设计的复杂性增加,软件许可资源的有效利用变得尤为重要。在这样的背景下,HyperWorks引入了智能的许可回收机制,旨在帮助企业更好地管理和再利用许可资源,提升效率和成本效益。 一、什么是HyperWorks许可回收机制? HyperWorks许可回收机制是一…...

flink on k8s的基本介绍

本文分享自天翼云开发者社区《flink on k8s的基本介绍》,作者:l****n 一、背景介绍 Apache Flink 是一个流处理引擎,具有高效的流处理和批处理能力,以及良好的可伸缩性和容错性。Kubernetes(简称 K8s)是一种容器编排系统,用于自动化容器部署、扩展和管理。将 Flink 部署…...