asp.net - 如何修复 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.net MVC 框架,那么您至少不必担心配置文件、dll、cshtml 文件等的目录遍历。IIS 不会不惜一切代价提供这些类型的敏感信息。但是,如果它有一些敏感信息,如密码、连接字符串等,加密你的配置文件总是更好的。
为了便于使用,最好在配置文件中加密机器密钥和连接字符串信息。
下一点如果我们保存自己的文件,它可能在数据库或服务器路径中。在这两种情况下,我们都必须小心攻击。不仅directory attack
,而且file upload attack
。
如果运行您的应用程序池的用户可以读取您的文件共享(默认为网络服务),您可以完全删除虚拟目录并创建一个 ASP.NET(任何框架)应用程序,将文件流式传输到浏览器。如果您使用
MVC
它只是返回一个文件结果。这有一个额外的好处,您将能够限制用户下载文件
注意:由于您从 web.config 获取路径并不意味着该路径下的文件可以安全地抵御目录攻击。如果黑客以某种方式获得了路径,那么他可以直接在浏览器\黑客工具\等中尝试。所以目标应该是保护文件而不是路径
简单的想法是创建另一个能够根据请求提供文件流的应用程序/方法。在那里您可以验证用户并提供文件,文件甚至可以保存在数据库或文件系统中(应用程序池用户没有直接访问权限)
推荐阅读
- windows - 使用未解析的变量或脚本参数创建脚本(如“%~dp0”)
- vue.js - 如何在 vue 模板中使用异步功能?
- r - 在 geom_text() 的分组文本中插入返回
- html - HTML - 一个溢出的、相对定位的子元素在它的父元素中创建了额外的空间
- python - 如何从 Kivy 的 ScreenManager 访问 id 并通过主应用程序类处理它们?
- php - 无法在非身份验证应用程序中显示会话变量
- typescript - 类型“Type[T]”上不存在属性“key”
- special-characters - 在 ColdFusion 中保留重音字符值
- azure - 如何在本地运行 2 个 Azure 存储本地模拟器实例?
- ios - iOS React Native:只有在有 RN 更改时“捆绑 React Native 代码和图像”