Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

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,