aboutsummaryrefslogtreecommitdiff
path: root/files/pt-pt/usando_privilégios_expandidos_em_navegadores_mozilla/index.html
blob: 7b54dfbde696d02f5b2b3f77e73c224945c274be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
---
title: Usando privilégios expandidos em navegadores Mozilla
slug: Usando_privilégios_expandidos_em_navegadores_Mozilla
tags:
  - JavaScript
  - Todas_as_Categorias
---
<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" 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" 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>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>