【发布时间】:2010-12-12 23:44:48
【问题描述】:
我有一个 Web 应用程序,您可以通过给它一个 url 来从另一个站点导入信息。有人指出,您可以使用此功能访问托管在同一网络服务器上的私人网站。
所以...
如何检查给定的 url 是否可以公开访问(无论是在同一 Web 服务器上还是在不同的地方)?
修复: 我最终这样做了:
protected static bool IsHostWithinSegment(string Host)
{
Ping pinger = new Ping();
string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
byte[] buffer = Encoding.ASCII.GetBytes(data);
PingOptions options = new PingOptions();
options.Ttl = 1;
PingReply reply = pinger.Send(Host, 1000, buffer, options);
return reply.Status == IPStatus.Success;
}
private static Uri BindStringToURI(string value)
{
Uri uri;
if (Uri.TryCreate(value, UriKind.Absolute, out uri))
return uri;
// Try prepending default scheme
value = string.Format("{0}://{1}", "http", value);
if (Uri.TryCreate(value, UriKind.Absolute, out uri))
return uri;
return null;
}
我唯一不满足的要求是我们产品的某些安装将彼此并存,您将无法在它们之间导入信息 - 我怀疑这将需要使用代理服务器来获取对事物的外部看法,但由于这不是我的项目的要求,所以我将其留给其他人。
-- 我刚刚意识到这确实完全解决了我的问题,因为所有可公开访问的 url 都解析为虚拟或可路由的 ip,这意味着它们会跳跃。
【问题讨论】:
-
通过从您的网站外部将 URL 输入网络浏览器...
-
一个基于网络的代理就派上用场了。甚至是普通的 HTTP 代理。
-
我的意思是以编程方式 - 用户提交 url,在我得到它之前,我需要知道它不是托管在防火墙后面某处的私人站点。
-
哦...所以这是安全问题...让我重新标记...
-
您可能还对
string data = new string('a', length);感兴趣