dr.*_*vil 2 .net security process
基本上我正在尝试在我的.NET应用程序中打开一个URL.这可以通过以下方式轻松实现:
Process.Start("http://www.google.com")
Run Code Online (Sandbox Code Playgroud)
但是在我的情况下,URL可以由外部用户控制,因此我不希望它们通过注入元字符等来在系统中执行命令.
安全的方式是:
New Process()使用默认浏览器的可执行文件创建 在实现这个之前,我只想确定我不会使这个过于复杂.你怎么看?
我并不热衷于对输入实施过滤,这只是一个肮脏的解决方案
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).