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

脚本化文件删除安全措施及游戏引擎文件写入防护方案咨询

限制游戏引擎仅在指定目录内保存文件的解决方案

一、实现仅允许保存到游戏目录内的方法

当然可以实现这类限制,核心思路是对所有待保存的路径做严格的范围校验,具体步骤如下:

  • 先确定合法的保存根目录:可以是游戏安装目录下的专属子文件夹(比如./saves/),或是系统标准的用户数据目录(比如Windows的%APPDATA%\YourGame\Saves),并获取该目录的规范化绝对路径(消除所有相对路径、符号链接等特殊情况)。
  • 对用户输入的保存路径/文件名,通过系统API或标准库(比如C++17的std::filesystem、Python的pathlib)将其转换为绝对路径并规范化,处理掉相对路径、短文件名、符号链接等问题。
  • 校验规范化后的路径是否完全落在合法根目录的子树内:不能仅做字符串前缀匹配(要考虑Windows大小写不敏感、路径分隔符混用等情况),应该用专门的路径对比函数,比如std::filesystem::path::lexically_normal处理后判断是否以合法根路径为前缀,或是调用系统提供的路径归属校验接口。
  • 封装统一的保存入口:所有模块的文件写入操作必须通过这个校验后的接口,禁止直接调用底层文件写入API,避免出现绕过校验的情况。

二、仅检查..不足以保障安全

只过滤路径中的..完全不够,攻击者或误操作的用户有很多其他方式跳出游戏目录:

  • 绝对路径直接输入:用户直接填写C:\Windows\test.txt这类绝对路径,无需..就能直接访问游戏目录外的文件。
  • Windows短文件名:比如C:\Game\PROGRA~1可能对应C:\Program Files,这类路径不含..但会跳转到外部目录。
  • 符号链接/ junction点:如果游戏目录内存在指向外部的符号链接,用户保存到该链接路径会直接跳转到外部文件。
  • 环境变量注入:用户输入%SYSTEMROOT%\file.txt,解析后会指向系统目录,同样不含..。
  • 特殊路径格式:比如Windows的\\?\C:\...扩展路径格式,或者/与\混用的路径,仅检查..无法识别。

正确的做法是跳过字符校验,直接通过路径规范化+范围校验来确保所有保存操作都限制在合法目录内。

额外安全建议

  • 使用系统提供的路径拼接函数(比如std::filesystem::operator/)拼接用户输入的文件名,避免手动拼接导致的路径注入问题。
  • 采用"先写临时文件,成功后替换目标文件"的保存逻辑,既避免文件损坏,也降低恶意利用的风险。
  • 限制用户输入的文件名只能包含合法字符(比如Windows禁止:、*、?、"等字符),减少异常路径的产生。
  • 以普通用户权限运行游戏,即使出现漏洞,也能限制破坏范围。

内容的提问来源于stack exchange,提问作者Eric Bishop

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:54:53