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

dr.*_*vil 2 .net security process

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

Process.Start("http://www.google.com")
Run Code Online (Sandbox Code Playgroud)

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

安全的方式是:

  • 阅读注册表,看看默认浏览器是什么
  • New Process()使用默认浏览器的可执行文件创建
  • 提供URL作为参数
  • 开始这个过程

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

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

Jar*_*Par 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());
}
Run Code Online (Sandbox Code Playgroud)

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

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