我的代码是否阻止c#中的目录遍历?



请查看下面我写的代码:

private void WriteLogs(Guid _guid)
{
string varpath = ConfigurationManager.AppSettings["LogFilePath"].ToString() + @"ErrorLogsLogs";
string FileName = _guid.ToString() + ".txt";
string finalPath = System.IO.Path.GetFullPath(varpath + FileName);
if (Path.GetDirectoryName(finalPath) == Path.GetDirectoryName(varpath))
{
    if (!Directory.Exists(varpath))
    {
        Directory.CreateDirectory(varpath);
    }
    // Other code
}
}

请让我知道这个代码是否可以防止目录遍历缺陷?

由于Guid是唯一传入的东西,而Guid不能是....的形式,我认为您将安全免受目录遍历攻击。

唯一的其他输入是ConfigurationManager.AppSettings["LogFilePath"]。这可能是X:Example..的形式,但它也可能是X:,所以我不认为这是一个问题。无论哪种方式,您都将把@"ErrorLogsLogs"添加到您正在编写的路径中。

我还建议使用Path。结合起来,这样你就不会迷失在

string varpath = Path.Combine(ConfigurationManager.AppSettings["LogFilePath"]
                     .ToString(), @"ErrorLogsLogs");

这是为我工作:

 private bool IsValidPath(string fileNamePath)
    {
        if (string.IsNullOrWhiteSpace(fileNamePath))
            return false;
        var decodedPath = HttpUtility.UrlDecode(fileNamePath);
        return decodedPath.IndexOfAny(Path.GetInvalidPathChars()) < 0 &&
            decodedPath.IndexOfAny(Path.GetInvalidFileNameChars()) < 0 &&
            fileNamePath.IndexOfAny(Path.GetInvalidPathChars()) < 0 &&
            fileNamePath.IndexOfAny(Path.GetInvalidFileNameChars()) < 0;
    }

相关内容

  • 没有找到相关文章