Gostaria de saber se é possível sandbox JavaScript em execução no navegador para impedir o acesso a recursos que normalmente estão disponíveis para o código JavaScript em execução em uma página HTML.
Por exemplo, digamos que desejo fornecer uma API JavaScript para os usuários finais, para que eles definam manipuladores de eventos a serem executados quando "eventos interessantes" acontecerem, mas não quero que esses usuários acessem as propriedades e funções do window
objeto. Eu sou capaz de fazer isso?
No caso mais simples, digamos que eu queira impedir que os usuários liguem alert
. Algumas abordagens em que consigo pensar são:
- Redefina
window.alert
globalmente. Eu não acho que isso seria uma abordagem válida, porque outro código em execução na página (ou seja, coisas não criadas pelos usuários em seus manipuladores de eventos) pode querer usaralert
. - Envie o código do manipulador de eventos ao servidor para processar. Não tenho certeza de que enviar o código ao servidor para processar seja a abordagem correta, porque os manipuladores de eventos precisam ser executados no contexto da página.
Talvez uma solução em que o servidor processe a função definida pelo usuário e gere um retorno de chamada a ser executado no cliente funcionaria? Mesmo que essa abordagem funcione, existem maneiras melhores de resolver esse problema?
while (1) {}
--- simplesmente trava. Da mesma formaa=[]; while (1) { a=[a,a]; }
.