如何确保用户提供的网址不是本地路径?

时间:2012-06-07 12:17:43

标签: c# asp.net .net security

我正在扭曲一个Web应用程序(ASP.Net MVC,C#),要求用户提供RSS或Atom Feed的URL,然后我用以下代码阅读:

var xmlRdr = XmlReader.Create(urlProvidedByUserAsString);
var syndicFeed = SyndicationFeed.Load(xmlRdr);

在调试我的应用程序时,我不小心将/something/like/this作为网址传递过来,我得到一个例外,告诉我C:\something\like\this无法打开。

看起来用户可以提供本地路径,我的应用程序会尝试读取它。

如何使此代码安全?在网址开头检查https://http://可能是不够的,因为用户仍然可以输入http://localhost/blah之类的内容。有没有其他方法,也许与uri类检查一个网址是否指向网络?

修改:我想我还需要阻止用户输入指向我网络上其他计算机的地址,例如:http://192.168.0.6/http://AnotherMachineName/

1 个答案:

答案 0 :(得分:1)

尝试:

new Uri(@"http://stackoverflow.com").IsLoopback
new Uri(@"http://localhost/").IsLoopback
new Uri(@"c:\windows\").IsLoopback