Fortify安全审查向我们通报了一些路径操纵漏洞。大多数都是明显且容易修复的,但我不明白如何解决以下问题。
string[] wsdlFiles = System.IO.Directory.GetFiles(wsdlPath, "*.wsdl");
“wsdlPath”是从文本框输入的。这是不能修复的东西吗?我可以验证存在的路径等,但是如何帮助漏洞?
答案 0 :(得分:8)
如果始终从文本框中获取数据,文本框的内容由用户确定,并且代码使用该用户的权限运行,则唯一的威胁是用户攻击自己的威胁。这不是一个有趣的威胁。
该工具试图提醒您的漏洞是,如果低信任恶意代码可以确定该字符串的内容,则恶意代码可以尝试发现有关用户的事实机器,就像“是这样的,我碰巧知道这样的程序有一个安装和未修补的安全漏洞?”或“这台机器上有一个名为'admin'的用户?”等等。
答案 1 :(得分:1)
您永远不应该直接将任何内容提供给未经过滤的OS API。你应该清理输入,确保它不包含路径(即“../../../somefile”并确保它截断长名称,并且只包含有效的文件名字符(例如,有各种各样的与国际字符有关的错误。)
答案 2 :(得分:1)
使用该代码,经过身份验证并授权使用该功能的任何用户都可以访问服务器上的文件系统。访问将使用运行Web应用程序的服务帐户的凭据完成。
根据返回数据的使用方式,恶意用户可能会获得更多信息或使服务器的行为方式与非预期的一致。
您应该将允许的路径集限制为仅包含一个或几个精心选择的目录。使用Path
类中的函数将字符串组合到路径中 - 它们会处理用户为您输入c:\allowedpath\..\windows\system32
之类的内容。
答案 3 :(得分:0)
这种情况需要进行编码和解码,以确保不会在任何地方操纵数据。因为在解密时如果更改了数据,您将得到错误的结果。
您可以创建编码和解码。我是使用System.Security.Cryptography提供的RijndaelManaged和PasswordDeriveBytes类完成的