代码之家  ›  专栏  ›  技术社区  ›  userx

安全的进程。开始不可信URL字符串的实现

  •  5
  • userx  · 技术社区  · 14 年前

    我想避免有人传递“C:\Windows\malus”_代码.exe“作为URL关闭

    我现在的想法是这样做:

    Uri url = new Uri(urlString, UriKind.Absolute);
    if( url.Scheme == Uri.UriSchemeHttp || url.Scheme == Uri.UriSchemeHttps )
    {
       Process.Start(url.AbsoluteUri);
    }
    

    我很肯定这两个案子都是由这个来处理的(我不相信)进程。开始允许您像在批处理文件中一样启动两个进程,这应该只允许以http:或https:开头的字符串,并且是有效的URL)

    在C#中有更好的方法吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Chris Laplante    14 年前

    scheme url的。 ftp:// , http:// file:// 等)以下是方案列表: http://en.wikipedia.org/wiki/URI_scheme#Official_IANA-registered_schemes

    Uri u = new Uri("C:\\Windows");
    String scheme = (u.GetLeftPart(UriPartial.Scheme).ToString());
    

    对我来说,上面的例子 . 只需检查方案,使用上面的代码,并拒绝那些你想过滤。另外,在解析过程中使用 try-catch

    如果你想极端偏执安全,你总是可以解析的网址使用网址解析器和重建它,验证每一个部分,因为你沿着。