Mozilla's getting a new look. What do you think? https://mzl.la/brandsurvey

Usando privilégios expandidos em navegadores Mozilla

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 e UniversalPreferencesWrite.
UniversalFileRead
Uso do método window.open com URLs file:// 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

Categorias

Interwiki Language Links

Etiquetas do documento e colaboradores

 Colaboradores para esta página: Leandro Mercês Xavier, Verruckt
 Última atualização por: Leandro Mercês Xavier,