Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何确保用户提供的url不是本地路径?_C#_Asp.net_.net_Security - Fatal编程技术网

C# 如何确保用户提供的url不是本地路径?

C# 如何确保用户提供的url不是本地路径?,c#,asp.net,.net,security,C#,Asp.net,.net,Security,我正在编写一个web应用程序(ASP.Net MVC,C#),它要求用户提供指向RSS或Atom提要的URL,然后我使用以下代码阅读这些URL: var xmlRdr = XmlReader.Create(urlProvidedByUserAsString); var syndicFeed = SyndicationFeed.Load(xmlRdr); 在调试我的应用程序时,我意外地将/something/like/this作为url传递,我得到一个异常,告诉我C:\something\lik

我正在编写一个web应用程序(ASP.Net MVC,C#),它要求用户提供指向RSS或Atom提要的URL,然后我使用以下代码阅读这些URL:

var xmlRdr = XmlReader.Create(urlProvidedByUserAsString);
var syndicFeed = SyndicationFeed.Load(xmlRdr);
在调试我的应用程序时,我意外地将
/something/like/this
作为url传递,我得到一个异常,告诉我
C:\something\like\this
无法打开

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

如何使此代码安全?在url开头检查
https://
http://
可能是不够的,因为用户仍然可以输入类似
http://localhost/blah
。有没有其他方法,可能是通过uri类来检查url是否指向web

编辑:我想我还需要防止用户输入指向我网络上其他机器的地址,例如:
http://192.168.0.6/
http://AnotherMachineName/

试试:

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

太好了,这似乎可以。然而,我只是想到另一个情况,这可能无法处理。如果用户输入
http://anotherMachineNameOrIpOnMyNetwork/
?默认情况下,我们公司通常被阻止从DMZ访问LAN和其他DMZ服务器(在DMZ网络内),只允许访问特定服务和internet。此外,您还可以解析指定URL的IP,并检查它们的本地网络区域。当然,所有内容都应该进行防火墙保护,但我仍然希望确保我不会让任何门打开。