You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

修复存在LFI漏洞的Ship Parts网站:验证合法文件访问

修复Ship Parts网站LFI漏洞的极简方案

核心思路

别慌!咱们不用搞复杂的路径校验,直接搞个**「合法文件白名单」**——只允许访问你提前指定的文件,任何不在名单里的请求直接返回错误提示。不管黑客怎么篡改参数,都钻不了空子。


具体修复步骤(以最常见的PHP为例,其他语言逻辑通用)

假设你现在的漏洞代码大概是这样的(直接包含用户提交的文件):

$file = $_GET['page']; // 获取用户传的文件名参数
include($file); // 直接包含文件——这就是漏洞根源!

把上面的代码完全替换成下面这段,我标了超直白的注释,照着抄就行:

// 第一步:把所有允许访问的合法文件名列在这里
$allowed_files = [
    'inflatable.html',
    'engine-parts.html',
    'hull-accessories.html' // 最后一个文件名后面不用加逗号
];

// 第二步:拿到用户请求的文件名
$requested_file = $_GET['page'];

// 第三步:检查请求的文件是否在白名单里
if (in_array($requested_file, $allowed_files)) {
    // 合法文件,正常显示
    include($requested_file);
} else {
    // 非法请求,直接甩错误提示
    echo "抱歉,你访问的页面不存在!";
}

小白友好说明

  • 怎么加合法文件? 把你网站上真正需要通过这个参数访问的文件名,都写到$allowed_files的方括号里,每个文件名用引号包起来,逗号分隔就行。
  • 错误提示能改吗? 必须可以!把echo后面的文字换成你想显示的内容,比如“非法请求,请返回首页”或者“页面未找到”。
  • 其他编程语言怎么办? 逻辑完全一样!先搞个合法文件列表,再判断用户请求的文件在不在列表里,在就正常显示,不在就返回错误。举个Node.js的简单例子:
// Node.js版极简示例
const allowedFiles = ['inflatable.html', 'engine-parts.html'];
const requestedFile = req.query.page;

if (allowedFiles.includes(requestedFile)) {
    // 正常返回文件内容
    res.sendFile(requestedFile);
} else {
    // 返回错误提示
    res.status(404).send("非法请求!");
}

额外提醒

  • 千万别用「黑名单」(就是禁止某些非法文件名),黑客能想出各种绕过方法,白名单才是最安全的。
  • 替换代码前记得备份原来的代码,万一出问题还能快速恢复。

内容的提问来源于stack exchange,提问作者Mortality Doesn't Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:43:20