MDN may have intermittent access issues April 18 13:00 - April 19 01:00 UTC. See whistlepig.mozilla.org for all notifications.

mozilla

Revision 255834 of Usando privilégios expandidos em navegadores Mozilla

  • Slug da revisão: Usando_privilégios_expandidos_em_navegadores_Mozilla
  • Título da revisão: Usando privilégios expandidos em navegadores Mozilla
  • ID da revisão: 255834
  • Criado:
  • Autor: Leandro Mercês Xavier
  • É revisão atual? Sim
  • Comentário /* Informações Sobre o Documento Original */

Conteúdo da revisão

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

Fonte da revisão

<p>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.
</p><p>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:
</p>
<pre>netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");

//ou: 

netscape.security.PrivilegeManager.enablePrivilege("UniversalPreferencesRead UniversalFileRead");
</pre>
<p>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 <code><a class=" external" href="file://" rel="freelink">file://</a></code>, 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.
</p><p>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.
</p>
<h3 id="Exemplo" name="Exemplo"> Exemplo </h3>
<p>A função <code>b</code> 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 <i>perigosas</i> no código.
</p>
<pre>function mostraPrivilegios(i) {
  try{
    if (history[0] != "") {
	  document.write(i + ": habilitado&lt;br&gt;");
	}
  } catch (e) {
    document.write(i + ": desabilitado&lt;br&gt;");
  }
}

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);
</pre>
<p>Este exemplo exibe o seguinte resultado:
</p>
<pre>1: desabilitado
2: desabilitado
3: desabilitado
4: habilitado
5: habilitado
6: habilitado
7: desabilitado
8: desabilitado
</pre>
<h3 id="Privil.C3.A9gios" name="Privil.C3.A9gios"> Privilégios </h3>
<dl><dt> UniversalBrowserRead
</dt><dd> Leitura de dados sensíveis do browser. Isto permite que o certificado passe a verificação da mesma origem ao ler de qualquer documento.
</dd></dl>
<dl><dt> UniversalBrowserWrite
</dt><dd> 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.
</dd></dl>
<dl><dt> UniversalXPConnect
</dt><dd> Acesso irrestrito às APIs do browser usando XPConnect.
</dd></dl>
<dl><dt> UniversalPreferencesRead
</dt><dd> Ler preferências usando o método <code>navigator.preference</code>.
</dd></dl>
<dl><dt> UniversalPreferencesWrite
</dt><dd> Ajustar preferências usando o método <code>navigator.preference</code>.
</dd></dl>
<dl><dt> CapabilityPreferencesAccess
</dt><dd> 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 <code>UniversalPreferencesRead</code> e <code>UniversalPreferencesWrite</code>.
</dd></dl>
<dl><dt> UniversalFileRead
</dt><dd> Uso do método <code>window.open</code> com URLs <code><a class=" external" href="file://" rel="freelink">file://</a></code> e permite que o browser faça upload de arquivos usando <code>&lt;input type="file"&gt;</code>.
</dd></dl>
<p><i><b>Nota:</b> Este artigo, bem como seu exemplo, foi baseado no artigo <a class="external" href="http://www.mozilla.org/projects/security/components/signed-scripts.html">Signed Scripts in Mozilla</a>, porém, conta com atualizações para conformidade no uso de navegadores atuais.</i>
</p>
<div class="originaldocinfo">
<h3 id="Informa.C3.A7.C3.B5es_Sobre_o_Documento_Original" name="Informa.C3.A7.C3.B5es_Sobre_o_Documento_Original"> Informações Sobre o Documento Original </h3>
<ul><li> Autor: <a href="User:Leandro_Merc%c3%aas_Xavier">Leandro Mercês Xavier</a>
</li><li> Última Atualização: 16/11/2006
</li><li> Informações sobre Copyright: Este artigo está disponível sob os termos da <a class="external" href="http://creativecommons.org/licenses/by-sa/2.5/br/">Creative Commons Atribuição-Compartilhamento pela mesma licença 2.5 Brasil</a>
</li></ul>
</div>
<p><span class="comment">Categorias</span>
</p><p><span class="comment">Interwiki Language Links</span>
</p>
Reverter para esta revisão