怎样对付邪恶呢?在 System.Shell.execute() 之前验证用户输入;
我正在使用 Windows 小工具中的 API 来启动 URL,但我知道诸如 eval()
之类的破坏力以及最糟糕且更危险的 System.Shell.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') );
I'm using a API from Windows gadgets to launch URLs, but I know the destructive power about things like eval()
and worst and more dangerous, the System.Shell.execute();
But after some research, I think theres no better way to launch URL on the default browser without execute(). Since URLs come from user input, how to prevent users to execute evil-code? My code is SAFE or it can be exploitable? prevent things like this cmd.exe /c REG QUERY HKCU etc
launching cmd.exe with administrator privileges.
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);
edit:
allowing this 2 protocols is unsafe file:///
and javascript:
exemples that can be done:
file:///c:/windows/system32/ping.exe
javascript:void( window.open('http://file:///c:/windows/system32/ping.exe','','_blank') );
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您的使用听起来像是 Google Caja 的潜在候选者。这个项目试图清理来自第三方的 JavaScript,以确保您可以安全地运行。
Your use sounds like a potential candidate for Google Caja. It's a project that attempts to sanitize JavaScript from third parties to make it safe for you to run.