Usando privilégios expandidos em navegadores Mozilla
De MDC
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.
[editar] 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
[editar] 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
UniversalPreferencesReadeUniversalPreferencesWrite.
- UniversalFileRead
- Uso do método
window.opencom 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.
[editar] 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