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

Você deveria parar de se animar tanto com o wi-fi grátis do restaurante

Getty Images/iStockphoto
Imagem: Getty Images/iStockphoto

Rodrigo Lara

Colaboração para Tilt

05/01/2020 04h00

Se você chega a um bar ou restaurante e quer saber a senha do wi-fi antes do cardápio ou de uma bebida, você precisa ler esse texto e decidir se trocará a alegria de se conectar de graça pela falta de segurança. Afinal, em meio às várias pessoas online naquela rede, uma delas pode ser um hacker a fim de invadir seu celular.

As redes abertas podem ser uma armadilha para redirecionar as pessoas para sites fraudulentos, por meio de ataques como "ARP spoofing", uma técnica que o invasor consegue capturar o o a um endereço real da internet para obter dados de usuários. Por exemplo, duplica o número IP de um site de banco (como 192.168.0.1) e assim alguém pode fornecer seu e senha para o ladrão de dados.

Outra tática usada pelo criminoso é a criação de redes com nomes similares aos usados em estabelecimentos. Daí ele espera alguém desavisado se conectar a esta rede falsa, acreditando ser a verdadeira do local. Quando isso acontece, o hacker poderá obter informações sensíveis guardadas no celular.

"Caso ele consiga ar o seu dispositivo, terá o a todas as informações que você está enviando pela internet, como emails, cartões de crédito, dados bancários, entre outros", diz o professor João Carlos Lopes Fernandes, do curso de Engenharia de Computação do Instituto Mauá de Tecnologia.

É por isso que a expressão "wi-fi público" tem um sentido bem literal. "Estar em uma rede do tipo significa dividir a internet com pessoas desconhecidas e aceitar automaticamente todos os riscos atrelados a isso", aponta Daniel Barbosa, especialista em segurança da informação da ESET no Brasil.

O problema, aqui, é que é praticamente impossível você garantir que todas as pessoas conectadas estejam apenas usando a rede para postar uma foto maneira no Instagram.

"Basta uma pessoa mal-intencionada escolher um local de grande tráfego, conectar-se a uma rede aberta e assim começar o ataque nessa rede onde todos estão conectados", complementa Fábio Assolini, analista sênior de cibersegurança da Kaspersky.

Por que há risco?

É importante considerar que, além de uma possível senha de autenticação —alguns lugares sequer usam uma— essas redes dificilmente têm algum outro mecanismo de segurança.

O de um roteador do tipo, geralmente, tende a ser o padrão de fábrica. Neste caso, as senhas para ar o de controle do aparelho, por exemplo, são facilmente encontradas na internet. Algumas, inclusive, são de conhecimento público, como a famosa "", usada a exaustão por vários modelos de roteadores.

Outro problema é que, por mais que você tenha um antivírus ou outra solução de segurança no seu notebook ou smartphone, isso não significa que você estaria totalmente protegido de um ataque do tipo.

"Por mais que um programa bloqueie o o a páginas de phishing e apps maliciosos, quando você está conectado a uma rede wi-fi controlada pelo criminoso ele pode tentar bloquear o contato desta solução com seus servidores e assim tentar impedir a detecção e bloqueio do ataque", aponta Assolini.

O que fazer então?

Se um antivírus não resolve, qual seria a melhor opção para se proteger? A primeira dica é bastante prosaica, óbvia até: uma vez que você não sabe quais medidas de segurança o estabelecimento toma, o ideal é evitar se conectar a redes do tipo.

Caso a sugestão acima esteja fora de cogitação, vale usar um antivírus ou um app de segurança com uma VPN, sigla em inglês para rede privada virtual. É importante notar que serviços de qualidade do tipo são pagos, uma vez que a maioria das VPNs gratuitas são extremamente inseguras.

"A VPN cria um canal de comunicação seguro entre o dispositivo e a internet, fazendo com que toda a navegação saia pelo destino da VPN, em vez de sair direto pela rede em que se está conectado", explica Barbosa.

Por fim, caso você esteja conectado a uma rede do tipo, evite ao máximo realizar tarefas importantes ou que exponham seus dados. "Não é uma boa ideia ar a sua conta de banco ou fazer compras online quando você estiver conectado a um wi-fi público", salienta Fernandes.

Use sempre o recurso de duplo fator de autenticação para ar sites e evitar instalar atualizações de apps quando estiver em uma conexão do tipo. E sugerimos fazer isso sempre, não apenas quando estiver nessas redes. Tudo isso ajuda a evitar que a economia do seu pacote de dados se torne uma tremenda dor de cabeça.

SIGA TILT NAS REDES SOCIAIS