我的代码是否阻止c#中的目录遍历?
本文关键字:遍历 代码 是否 我的 | 更新日期: 2023-09-27 18:18:04
请查看下面我写的代码:
private void WriteLogs(Guid _guid)
{
string varpath = ConfigurationManager.AppSettings["LogFilePath"].ToString() + @"'ErrorLogs'Logs'";
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:'
,所以我不认为这是一个问题。无论哪种方式,您都将把@"'ErrorLogs'Logs'"
添加到您正在编写的路径中。
我还建议使用Path。结合起来,这样你就不会迷失在'
的
string varpath = Path.Combine(ConfigurationManager.AppSettings["LogFilePath"]
.ToString(), @"ErrorLogs'Logs");
这是为我工作:
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;
}