Как бороться со злом? Проверка пользовательского ввода перед System.Shell.execute (); - PullRequest
1 голос
/ 08 ноября 2011

Я использую API из гаджетов Windows для запуска URL-адресов, но я знаю разрушительную силу таких вещей, как eval() и худших и более опасных, System.Shell.execute ();

Но после некоторого исследования, я думаю, что нет лучшего способа запустить URL в браузере по умолчанию без execute (). Поскольку 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 голосов
/ 09 ноября 2011

Ваше использование звучит как потенциальный кандидат на Google Caja .Это проект, который пытается очистить JavaScript от сторонних разработчиков, чтобы сделать его безопасным для вас.

...