基本上我正在尝试在我的.NET应用程序中打开一个URL。这可以通过以下方式轻松实现:
Process.Start("http://www.google.com")
但是在我的情况下,URL可以由外部用户控制,因此我不希望他们通过注入元字符等来执行系统中的命令。
安全的方式是:
New Process()
在实现这个之前,我只想确定我不会使这个过于复杂。你觉得怎么样?
我不热衷于对输入实施过滤,这只是一个肮脏的解决方案
答案 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班应该很容易。