【发布时间】:2011-11-08 18:55:06
【问题描述】:
我正在使用来自 Windows 小工具的 API 来启动 URL,但我知道诸如 eval() 之类的破坏力以及最糟糕和更危险的 System.Shell.execute();
但是经过一些研究,我认为没有更好的方法可以在没有 execute() 的情况下在默认浏览器上启动 URL。由于 URL 来自用户输入,如何防止用户执行恶意代码?我的代码是安全的还是可以被利用?防止类似cmd.exe /c REG QUERY HKCU etc 以管理员权限启动 cmd.exe 的事情。
function openURL(url){
var protocol=new Array();
//Allowed protocols to execute
protocol[0]='http://';
protocol[1]='https://';
protocol[2]='ftp://';
protocol[3]='search-ms:query=';
for(var i=0;i<protocol.length;i++){
if(url.indexOf(protocol[i])==0){
System.Shell.execute(url);
break;
}
}
}
window.open(); //doesn't work (only open IE);
编辑:
允许这 2 个协议是不安全的 file:/// 和 javascript:
可以做的例子:
file:///c:/windows/system32/ping.exe
javascript:void( window.open('http://file:///c:/windows/system32/ping.exe','','_blank') );
【问题讨论】:
-
如果您尝试通过通常的 shell 杂技执行多个命令会发生什么,例如。 (foo.com & ping.exe)?它会拒绝吗?
-
@3martini 字符串
http://foo.com & ping.exe被识别为URL,然后用地址http://foo.com%20&%20ping.exe打开浏览器并显示404
标签: javascript security shellexecute windows-desktop-gadgets exploit