;(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

Sabe o cadeado na barra de endereço? Ele não significa que você está seguro

Estúdio Rebimboca/UOL
Imagem: Estúdio Rebimboca/UOL

Rodrigo Lara

Colaboração para Tilt

07/02/2020 04h00

A ideia que um objeto como o cadeado a é a de segurança —afinal, ele funciona com uma trava, uma proteção. Não estaria errado supor, portanto, que esse cadeadinho que aparece na barra de endereço do seu navegador significaria que você está seguro, certo? Mas, na realidade, só significa que a página ada possui um certificado de segurança.

De acordo com Fábio Assolini, analista sênior de cibersegurança da Kaspersky, o cadeado indica que o conteúdo da página e os dados que nela serão inseridos 'viajaram' de forma segura entre o servidor web, onde está o site, e o seu computador. Esse tráfego seguro significa que os dados usam criptografia nesse trajeto, utilizando protocolos como o SSL (Secure Sockets Layer) e o TLS (Transport Layer Security).

O problema é que, se o cadeado ao menos em tese garante que correu tudo bem no caminho dos dados, ele é incapaz de garantir que o destino é realmente seguro.

Certificados inúteis?

A existência do cadeado também mostra que há um nível de segurança no site ado, mas não necessariamente que ele é seguro. "Muitos criminosos estão criando páginas maliciosas com este recurso de criptografia habilitado para torná-las mais verdadeiras", relata Daniel Barbosa, especialista em segurança da informação da ESET no Brasil.

Esses certificados acabaram banalizados. De maneira geral, obter um certificado digital era algo trabalhoso e que demandava tempo, uma vez que as empresas responsáveis pela sua emissão faziam uma checagem mais criteriosa para saber se o solicitante do certificado era realmente quem afirmava ser. Com o ar do tempo, esses certificados acabaram ficando mais baratos, as vendas foram automatizadas e as autoridades de certificação pararam de fazer essa verificação criteriosa.

Como resultado, ficou fácil para cibercriminosos comprarem certificados digitais para usá-los em sites falsos. Na opinião de Assolini, "a coisa só piorou depois que a Let's Encrypt [autoridade de certificação criada em 2016 e que emite certificados de criptografia TLS X.509 gratuitos] começou a distribuir certificados digitais de graça", o que amplificou o uso.

Há ainda uma fragilidade nesse ecossistema de certificados que demanda uma ação mais refinada do fraudador. Além de redirecionar o o a sites de bancos, por exemplo, um malwares [programas nocivos] manipula a visualização das páginas e adiciona emissores de certificados confiáveis à lista do navegador. Assim, os criminosos conseguem criar um certificado falso e validar com o navegador, que não emite qualquer mensagem de alerta sobre a segurança da conexão.

Isso quer dizer que as vítimas dos ataques am a ser direcionadas para páginas falsas de bancos com cadeados de segurança e com o https na barra de endereço. Nessas páginas, qualquer informação inserida —como senhas e outros dados sensíveis— acaba sendo roubada.

E agora, o que fazer?

Já que você não pode confiar só no cadeadinho, o que resta é se proteger de outras maneiras. Vale adotar uma postura mais defensiva, ou seja, desconfie. Cheque, observe e fique esperto.

Quando o assunto é segurança, é comum citar as VPNs, redes privadas que garantem que os dados não serão roubados em seu trajeto —considerando, claro, se este serviço for prestado por empresas idôneas. Elas garantem que os dados não serão interceptados, mas não são capazes de garantir que o destino deles seja, de fato, seguro.

Então, acima de tudo, preste atenção a sites suspeito, com erros de português e layout estranhos. Observe a URL, seja se há letras estranhas ou fora de contexto—há várias páginas falsas, por exemplo, que se aproveitam de erros de digitação do nome do endereço que seria o correto.

Na dúvida, não clique em links e confira o endereço da URL com as instituições responsáveis pelo site.

SIGA TILT NAS REDES SOCIAIS