怎样对付邪恶呢?在 System.Shell.execute() 之前验证用户输入;

发布于 2024-12-14 03:31:22 字数 984 浏览 4 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

魂ガ小子 2024-12-21 03:31:22

您的使用听起来像是 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文