C# 安全进程。启动不受信任URL字符串的实现
我的目标是在用户默认浏览器中安全地打开网页。此网页的URL被视为“不受信任”(将其视为使用此软件打开的文档中的链接,但文档可能来自任何地方,其中的链接可能是恶意的) 我希望避免有人将“C:\Windows\恶意代码.exe”作为URL传递出去 我现在的想法是这样做:C# 安全进程。启动不受信任URL字符串的实现,c#,security,url,process,C#,Security,Url,Process,我的目标是在用户默认浏览器中安全地打开网页。此网页的URL被视为“不受信任”(将其视为使用此软件打开的文档中的链接,但文档可能来自任何地方,其中的链接可能是恶意的) 我希望避免有人将“C:\Windows\恶意代码.exe”作为URL传递出去 我现在的想法是这样做: Uri url = new Uri(urlString, UriKind.Absolute); if( url.Scheme == Uri.UriSchemeHttp || url.Scheme == Uri.UriSchemeHt
Uri url = new Uri(urlString, UriKind.Absolute);
if( url.Scheme == Uri.UriSchemeHttp || url.Scheme == Uri.UriSchemeHttps )
{
Process.Start(url.AbsoluteUri);
}
我是否忘记了我的“urlString”中可能包含的任何其他内容,这些内容会导致这种情况的发生(例如,一个新行字符,它允许某人在URL之后偷偷启动第二个进程,或者可能执行以http开头的相对可执行文件)
我非常确定这两种情况都是通过这个来处理的(因为我不相信Process.Start允许您启动两个进程,就像在批处理文件中一样,并且这应该只允许以http:或https:开头的字符串,并且是有效的URL)
在C#中有更好的方法吗?您要检查的是url的
方案(即ftp://
,http://
,文件://
等)。以下是方案列表:
要查找URL的方案,请使用:
Uri u = new Uri("C:\\Windows");
String scheme = (u.GetLeftPart(UriPartial.Scheme).ToString());
对我来说,上面的例子给出了文件://
。只需使用上面的代码检查方案,并拒绝您想要筛选的方案。另外,用try catch
块包围解析,如果捕获到异常,则拒绝URL;它无法解析,因此您不应该信任它
如果你想极端偏执安全,你可以使用URL解析器解析URL并重新构建它,在进行过程中验证每个部分。我很确定这基本上就是我问题中实现的:)你所拥有的非常可靠。我想不出还有什么东西可以偷偷通过。