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

如何修复C#中Fortify检测到的非用户输入参数路径操纵问题

修复Fortify路径操纵告警的方案

问题场景

代码片段:

string fileUrl = "Folder1"+jaar+".docx";
getFile(fileUrl);

其中jaar是应用内部生成的int类型年份参数,无用户输入,但Fortify仍触发路径操纵告警。

修复方法

  1. 显式校验年份范围
    给内部生成的年份参数添加合法范围校验,确保值在预期区间内(比如限定为近10年到未来2年),避免意外非法值触发风险:

    // 示例:限定合法年份为2014-2026
    if (jaar < 2014 || jaar > 2026)
    {
        throw new ArgumentOutOfRangeException(nameof(jaar), "年份不在合法范围内");
    }
    string fileUrl = $"Folder1{jaar}.docx";
    getFile(fileUrl);
    
  2. 使用路径规范化API处理
    借助.NET内置的路径处理方法对生成的路径做规范化处理,同时可额外校验路径是否在预期目录下,让静态扫描工具识别到安全防护逻辑:

    string fileName = $"Folder1{jaar}.docx";
    string normalizedPath = Path.GetFullPath(fileName);
    // 可选:校验路径是否在预期根目录内
    string expectedRoot = Path.GetFullPath("你的目标根目录路径");
    if (!normalizedPath.StartsWith(expectedRoot, StringComparison.OrdinalIgnoreCase))
    {
        throw new InvalidOperationException("生成路径超出预期目录范围");
    }
    getFile(normalizedPath);
    
  3. 改用格式化字符串拼接
    虽然int类型本身不会包含路径遍历字符,但使用string.Format这类标准格式化方式,能让静态分析工具认可这种安全的拼接逻辑:

    string fileUrl = string.Format("Folder1{0}.docx", jaar);
    getFile(fileUrl);
    

说明

Fortify这类静态扫描工具会对所有动态拼接路径的行为做风险标记,哪怕输入来自内部。通过添加显式校验、使用安全的路径处理API,可以让工具识别到你已做安全防护,从而消除误报。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:45:21