;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Cansou de decorar senhas? Gerenciadores ajudam a criar opções seguras

iStock
Imagem: iStock

Do UOL, em São Paulo

23/08/2017 04h00

Está faltando criatividade para criar suas senhas? Ou falta memória para se lembrar de todos os códigos de o as redes sociais, e-mails e diferentes sites?

Para nossa sorte uma série de serviços online e aplicativos assumiram essa responsabilidade e eles têm facilitado a vida de muitos usuários. Os gerenciadores de senhas, como são chamados, ajudam na organização e prometem deixar tudo muito mais seguro.

Basicamente, eles funcionam como um banco de dados (que guarda as senhas) e, quando é preciso, preenchem automaticamente as respectivas combinações, seja para ar um e-mail, redes sociais, sites de compra. Você então não precisa mais lembrar a senha de cada um deles e nem digitá-las, já que elas estão salvas nesse “cofre” virtual. E tudo que você necessita para ter o ao cofre é uma senha, conhecida como "mestre".

As funcionalidades até variam de um programa para o outro, mas em geral eles não só ajudam a guardar as combinações pessoais como ainda verificam se a senha criada é segura ou não. 

Alguns programas ainda dão a opção para salvar todas as informações na nuvem ou localmente -- recurso interessante principalmente para aqueles mais descrentes do “poder” de segurança dos servidores virtuais.

E eles são mesmo seguros?

É uma grande questão o fato dos gerenciadores de senha serem realmente seguros. Boa parte trabalha com criptografia e os criadores defendem que esse recurso impede que os dados sejam ados por terceiros. Mas como ter certeza que as informações pessoais estarão seguras?

A resposta para essa pergunta realmente é difícil. Bem sabemos o quanto os crimes digitais estão cada vez mais complexos. Só que se tratando da necessidade de gravar inúmeras combinações na cabeça, usar os gerenciadores para ao menos organizar as combinações parece ser algo bem atraente.

Veja a seguir alguns serviços populares de gerenciamento de senhas

Dashlane (Android iOS – versão gratuita): é possível armazenar senhas, cartões de crédito e dados de o de diversos sites.

Durante o cadastro o programa pede que o usuário crie uma senha "mestre". É ela a responsável pelo o a todas as outras senhas registradas no sistema.

Além disso, ele envia alertas de segurança para o computador ou telefone cadastrado em caso de violações de sites.

Gerenciador de senhas: Dashlane - Reprodução - Reprodução
Imagem: Reprodução

Last  (navegadores, Android e iOS – versão gratuita): além das senhas, o programa permite salvar notas digitais onde você pode armazenar itens como senha do Wifi, endereço e dados relacionados a compras online.

Ele trabalha com um sistema de auto preenchimento. Então, sempre que precisar fazer uma compra, por exemplo, o programa insere o local de entrega e as formas de pagamento disponíveis.

Como funciona tanto em computadores quanto celulares, o sistema trabalha com sincronização automática com todos os dispositivos (desktop, notebook e celulares). Ou seja, você cadastra suas informações uma única vez e ela fica disponível em diferentes plataformas.

Gerenciador de senhas: last - Reprodução - Reprodução
Imagem: Reprodução

(navegadores, Android e iOS – grátis por 30 dias): ele salva informações separando-as por categorias como cartões de crédito, endereços, notas, contas bancárias, carteiras de motorista, aportes.

Além de senhas, o usuário pode cadastrar outras informações como endereços, contas bancárias, documentos pessoais e de cartões. O sistema lembra todas as senhas pessoais e utiliza um código “mestre” onde só o usuário terá que usá-lo para ar suas informações. Um ponto legal é que, caso o dispositivo tenha, ele usa impressão digital para autenticar no sistema.

Caso queira, o programa ainda permite compartilhar certas senhas com família ou colegas de empresa. Recurso interessante para aqueles dados que não precisam ficar s somente a você.

Gerenciador de senhas: 1 - Reprodução - Reprodução
Imagem: Reprodução

E se eu não quiser usar um gerador de senha?

Bom, os programas têm lá suas facilidades, mas há quem ainda prefira guardar as senhas em outros lugares. De qualquer forma, na hora de criar uma combinação é bom seguir algumas dicas para deixá-la o mais forte possível.

Inclusive, novas regras para a criação de senhas seguras foram divulgadas pelo Nist (Instituto Nacional de Padrões e Tecnologia, um órgão de padronização dos EUA) agora em agosto.

  • Quanto maior for sua senha, mais difícil fica de alguém ou um robô descobrir
  • Evite usar a mesma senha para vários serviços online
  • Não é preciso mais usar caracteres especiais. A nova recomendação é de que o usuário escolha uma sentença com mais palavras (quatro, por exemplo) e use como senha. Ele pode ainda usar espaços ou hifens
  • Troque suas senhas em caso de suspeita de invasão