在默认浏览器中打开URL的安全方法是什么?

时间:2009-03-28 13:27:20

标签: .net security process

基本上我正在尝试在我的.NET应用程序中打开一个URL。这可以通过以下方式轻松实现:

Process.Start("http://www.google.com")

但是在我的情况下,URL可以由外部用户控制,因此我不希望他们通过注入元字符等来执行系统中的命令。

安全的方式是:

  • 阅读注册表并查看默认浏览器
  • 使用默认浏览器的可执行文件
  • 创建New Process()
  • 提供URL作为参数
  • 启动流程

在实现这个之前,我只想确定我不会使这个过于复杂。你觉得怎么样?

我不热衷于对输入实施过滤,这只是一个肮脏的解决方案

2 个答案:

答案 0 :(得分:10)

为什么不通过解析来确保它是一个有效的HTTP URL?

Uri target = null;
if ( Uri.TryCreate(userSuppliedString, UriKind.Absolute, out target) &&
      (Uri.UriSchemeHttp == target.Scheme || Uri.UriSchemeHttps == target.Scheme) )
{
  // It's an URI that I can use 
  Process.Start(target.ToString());
}

请注意,此示例不使用userSupplied字符串来创建进程。它允许Uri类格式化传递给Start调用的字符串。

您可以扩展Scheme检查以包括您认为有效的所有方案(例如FTP)。

答案 1 :(得分:1)

我宁愿验证输入。 Uri班应该很容易。