Navegadores Mozilla dispõem de funções para segurança em Javascript similares às usadas para segurança em Java e Javascript no Netscape Communicator 4.x.
Em casos mais simples, o código pede permissão para habilitar o privilégio que possibilita o acesso ao alvo através de scripts. Por exemplo:
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); //ou: netscape.security.PrivilegeManager.enablePrivilege("UniversalPreferencesRead UniversalFileRead");
Quando este método é invocado, se a assinatura for válida (caso seja um script assinado) ou codebase principal esteja habilitado, os privilégios expandidos são concedidos. Caso o acesso não seja por meio de uma destas formas, por exemplo, utilizando um arquivo local através da url file://
, será exibida uma caixa de diálogo perguntando se o usuário permite que o script use estes privilégios e também se deseja memorizar esta decisão. Note que no segundo exemplo o script solicita dois privilégios, porém exibe apenas uma caixa de diálogo descrevendo-os.
Os privilégios são concedidos apenas no escopo da função que os solicitou. Este escopo inclui as funções chamadas por esta função. Quando a função termina, os privilégios não são mais aplicáveis.
Exemplo
A função b
solicita privilégios expandidos, e somente comandos e funções chamados no escopo da mesma após a solicitação têm privilégios concedidos. É uma boa prática habilitar privilégios somente quando necessário, e após o uso desabilitá-los. Isso ajuda a proteger o computador do usuário de seções perigosas no código.
function mostraPrivilegios(i) { try{ if (history[0] != "") { document.write(i + ": habilitado<br>"); } } catch (e) { document.write(i + ": desabilitado<br>"); } } function a() { mostraPrivilegios(5); } function b() { mostraPrivilegios(3); netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); mostraPrivilegios(4); a(); mostraPrivilegios(6); } function c() { mostraPrivilegios(2); b(); mostraPrivilegios(7); } mostraPrivilegios(1); c(); mostraPrivilegios(8);
Este exemplo exibe o seguinte resultado:
1: desabilitado 2: desabilitado 3: desabilitado 4: habilitado 5: habilitado 6: habilitado 7: desabilitado 8: desabilitado
Privilégios
- UniversalBrowserRead
- Leitura de dados sensíveis do browser. Isto permite que o certificado passe a verificação da mesma origem ao ler de qualquer documento.
- UniversalBrowserWrite
- Modificação de dados sensíveis do browser. Isto permite que o certificado passe a verificação da mesma origem ao escrever em qualquer documento.
- UniversalXPConnect
- Acesso irrestrito às APIs do browser usando XPConnect.
- UniversalPreferencesRead
- Ler preferências usando o método
navigator.preference
.
- UniversalPreferencesWrite
- Ajustar preferências usando o método
navigator.preference
.
- CapabilityPreferencesAccess
- Ler e ajustar as preferências que definem políticas de segurança, incluindo que privilégios foram concedidos e negados aos scripts. Você também necessita de
UniversalPreferencesRead
eUniversalPreferencesWrite
.
- UniversalFileRead
- Uso do método
window.open
com URLsfile://
e permite que o browser faça upload de arquivos usando<input type="file">
.
Nota: Este artigo, bem como seu exemplo, foi baseado no artigo Signed Scripts in Mozilla, porém, conta com atualizações para conformidade no uso de navegadores atuais.
Informações Sobre o Documento Original
- Autor: Leandro Mercês Xavier
- Última Atualização: 16/11/2006
- Informações sobre Copyright: Este artigo está disponível sob os termos da Creative Commons Atribuição-Compartilhamento pela mesma licença 2.5 Brasil
Categorias
Interwiki Language Links