gpt4 book ai didi

c# - 在子目录中安全地执行用户输入文件路径

转载 作者:行者123 更新时间:2023-11-30 19:51:18 24 4
gpt4 key购买 nike

我知道避免接受用户输入的可靠安全建议,然后您可以使用该输入来选择读取/写入文件的路径。然而,假设您有一个要保留在其中的基本目录(例如 ftp 文件夹的根目录),您如何最好地确保给定的用户输入将我们保留在该文件夹中?

例如,

Path.Combine(_myRootFolder, _myUserInput)

仍然可以将我们带到 _myRootFolder 之外。这也可能是狡猾的

newPath = Path.Combine(_myRootFolder, _myUserInput)
if (newPath.StartsWith(_myRootFolder))
...

从用户那里得到类似“/back/to/myrootfolder/../../and/out/again”的东西。对此有何策略?我是否缺少可以使用的非常明显的 .NET 方法?

最佳答案

在 ASP.NET 应用程序中,您可以使用 Server.MapPath(filename) 如果生成的路径超出您的应用程序根目录,它将引发异常。

如果你想要的只是一个安全的文件名,而你只想要那里的所有文件,那就更简单了;

    FileInfo file = new FileInfo(
Server.MapPath(
Path.Combine(@"c:\example\mydir", filename)));

如果您像您指出的那样在 ASP.NET 之外,那么您可以使用 Path.GetFullPath

string potentialPath = Path.Combine(@"c:\myroot\", fileName);
if (Path.GetFullPath(potentialPath) != potentialPath)
// Potential path transversal

或者您调用 Path.GetFullPath,然后检查它的开头是否与您要锁定的目录匹配。

关于c# - 在子目录中安全地执行用户输入文件路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1321466/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com