首页 > 解决方案 > 如何修复 C# asp.net 中的目录遍历安全漏洞?

问题描述

在此处查找快照 在为我的一个 asp.net mvc Web 应用程序运行 [IBM Security AppScan] 工具时,我的代码中出现了路径遍历漏洞。请参阅附加的快照和示例代码以更好地理解问题。有没有办法解决这些问题?

示例代码:

var storagePath = ConfigurationManager.AppSettings.Get("DOCS_STORAGE_PATH") + @"\Attachments";
var strMonth = DateTime.Now.Month.ToString().Length == 1 ? "0" + DateTime.Now.Month : DateTime.Now.Month.ToString();
var strYear = DateTime.Now.Year.ToString();
var strFolder = strYear + @"\" + strMonth + @"\";
storagePath = storagePath + @"\" + strFolder;

if (!Directory.Exists(@"" + storagePath))
{
    Directory.CreateDirectory(@"" + storagePath);
}

标签: asp.netsecurityowasp

解决方案


如果您使用的是 asp.net MVC 框架,那么您至少不必担心配置文件、dll、cshtml 文件等的目录遍历。IIS 不会不惜一切代价提供这些类型的敏感信息。但是,如果它有一些敏感信息,如密码、连接字符串等,加密你的配置文件总是更好的。

为了便于使用,最好在配置文件中加密机器密钥和连接字符串信息。

下一点如果我们保存自己的文件,它可能在数据库或服务器路径中。在这两种情况下,我们都必须小心攻击。不仅directory attack,而且file upload attack

如果运行您的应用程序池的用户可以读取您的文件共享(默认为网络服务),您可以完全删除虚拟目录并创建一个 ASP.NET(任何框架)应用程序,将文件流式传输到浏览器。如果您使用MVC它只是返回一个文件结果。这有一个额外的好处,您将能够限制用户下载文件

注意:由于您从 web.config 获取路径并不意味着该路径下的文件可以安全地抵御目录攻击。如果黑客以某种方式获得了路径,那么他可以直接在浏览器\黑客工具\等中尝试。所以目标应该是保护文件而不是路径

简单的想法是创建另一个能够根据请求提供文件流的应用程序/方法。在那里您可以验证用户并提供文件,文件甚至可以保存在数据库或文件系统中(应用程序池用户没有直接访问权限)


推荐阅读