如何应对邪恶?在System.Shell.execute()之前验证用户输入;

时间:2011-11-08 18:55:07

标签: javascript security shellexecute windows-desktop-gadgets exploit

我正在使用Windows小工具中的API来启动网址,但我知道有关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') );

1 个答案:

答案 0 :(得分:0)

您的使用听起来像Google Caja的潜在候选人。这是一个试图从第三方清理JavaScript以使您安全运行的项目。