1

私は 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') );

4

1 に答える 1

0

あなたの使用は、 Google Cajaの潜在的な候補のように思えます。これは、第三者の JavaScript を安全に実行できるようにサニタイズしようとするプロジェクトです。

于 2011-11-08T21:45:31.217 に答える