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

如何修复C#中的Cleansing_Canonicalization_and_Comparison_Errors Checkmarx漏洞?附代码示例求助

修复C#中的Checkmarx Cleansing_Canonicalization_and_Comparison_Errors漏洞

首先得搞清楚这个告警到底是什么意思:Checkmarx触发这个漏洞,是因为你直接把**用户可控的输入(这里是DownloadFileCtrl.Value)**和服务器路径拼接,既没有对输入做规范化处理,也没有验证输入的合法性——这就给了攻击者机会,比如通过输入../../some-malicious-file.txt这类路径遍历内容,访问或删除服务器上不在预期目录里的文件。

针对你代码里的问题,我们可以通过以下几步来修复:

1. 永远不要直接用字符串拼接路径,改用Path.Combine

字符串拼接路径很容易出现分隔符问题,而且无法自动处理非法路径结构。Path.Combine会帮你正确处理不同系统的路径分隔符,还能在一定程度上规避路径遍历风险(但光靠它还不够)。

2. 对用户输入做严格的合法性校验

用户输入的应该只能是单纯的文件名,不能包含路径分隔符(/、\)或者路径遍历符号(..)。我们可以用Path.GetFileName提取输入中的文件名部分,或者直接检查输入是否包含非法字符。

3. 验证最终路径是否在允许的目录范围内

即使做了前面两步,最好再确认最终生成的文件路径确实在你指定的appPath目录下,防止出现绕过校验的情况。

修改后的代码示例

string appPath = ConfigurationManager.AppSettings["ServerPath"].ToString();
try 
{
    // 第一步:提取合法的文件名,过滤掉路径部分
    string fileName = Path.GetFileName(DownloadFileCtrl.Value);
    if (string.IsNullOrEmpty(fileName))
    {
        // 处理非法输入的情况,比如返回错误提示
        throw new ArgumentException("Invalid file name provided.");
    }

    // 第二步:用Path.Combine拼接合法路径
    string fullFilePath = Path.Combine(appPath, fileName);

    // 第三步:验证最终路径是否在允许的目录内
    string normalizedAppPath = Path.GetFullPath(appPath);
    string normalizedFullPath = Path.GetFullPath(fullFilePath);
    if (!normalizedFullPath.StartsWith(normalizedAppPath, StringComparison.OrdinalIgnoreCase))
    {
        // 路径超出允许范围,拒绝操作
        throw new SecurityException("Attempted access to unauthorized file path.");
    }

    // 现在执行安全的文件操作
    FileLoader.FileDownLoad(fullFilePath);
    FileLoader.DeleteFile(fullFilePath);
}
catch (Exception ex)
{
    // 这里可以添加错误日志和友好提示
    // Log.Error(ex, "File operation failed");
}

关键修复点解释:

  • Path.GetFileName(DownloadFileCtrl.Value):会自动去掉输入中的路径部分,只保留文件名,比如输入../../file.txt会被处理成file.txt。
  • Path.Combine(appPath, fileName):安全拼接路径,避免手动拼接的错误。
  • 路径规范化与校验:用Path.GetFullPath把两个路径都转换成绝对路径,然后检查最终路径是否以允许的目录开头,彻底防止路径遍历攻击。

这样修改后,Checkmarx的告警应该就会消失,同时你的代码也变得更安全,能抵御路径遍历类的攻击。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 08:52:36