【问题标题】:How to deal with evil? Validating user input before System.Shell.execute();如何对付邪恶?在 System.Shell.execute() 之前验证用户输入;
【发布时间】: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 &amp; ping.exe 被识别为URL,然后用地址http://foo.com%20&amp;%20ping.exe 打开浏览器并显示404

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 2016-01-27
    • 1970-01-01
    相关资源
    最近更新 更多