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

Após bloqueio do Instagram, demanda por VPN dispara na Rússia; entenda

Getty Images/iStock
Imagem: Getty Images/iStock

De Tilt, em São Paulo*

14/03/2022 18h59

A demanda por VPNs, ferramentas para contornar restrições à internet, disparou na Rússia após o país bloquear o o às principais plataformas de mídia social da Meta, Facebook e Instagram, mostraram dados de uma empresa de monitoramento.

O o ao Instagram na Rússia foi cortado a partir desta segunda-feira (14) em resposta à decisão de Meta na semana ada de permitir que pessoas na Ucrânia postassem mensagens como "morte aos invasores russos".

Na véspera da proibição do Instagram, a demanda por VPNs (redes privadas virtuais, na sigla em ingês), que criptografam dados e ocultam a localização da pessoa, aumentou 2.088% acima da demanda média diária em meados de fevereiro, segundo a empresa de monitoramento Top10VPN.

A demanda por VPNs já vinha aumentando na região, pois sites russos e ucranianos foram vítimas de ataques cibernéticos no contexto da guerra. A Rússia baniu várias opções de VPNs no ano ado, sem conseguir bloqueá-las completamente, como parte de uma campanha mais ampla que críticos consideram um sufocamento da liberdade na internet.

Ainda segundo uma análise de dados do Top10VPN, ao menos 203 sites de notícias e 97 sites de câmbio e criptomoedas estão atualmente bloqueados na Rússia.

Como funciona uma VPN? É ilegal?

As VPNs (Virtual Private Network) criam um canal direto entre um ponto de o (no caso, um computador ou celular) e o endereço de destino (um site, aplicativo ou um banco de dados, por exemplo), por isso foram primeiramente adotadas pelas empresas que buscavam as redes corporativas e seguras.

A conexão deixa de ser pública —ando por servidores de operadoras de internet ou de empresas como o Google— e se tornam privada, usando servidores da empresa de VPN contratada.

Seria como tentar ir do ponto "A" ao ponto "Z" de carro, mas a estrada que liga diretamente esses dois pontos está bloqueada. Então você utiliza outras vias, a por outros pontos e "dribla" o bloqueio da estrada principal.

Os serviços pagos de VPN costumam ser bem seguros. Além de guardarem seus dados, eles garantem uma velocidade de conexão superior à obtida quando se utiliza a internet de maneira convencional.

No caso das VPNs gratuitas, o problema é que esses outros pontos por onde am os dados de sua conexão costumam ser bem vulneráveis. Os pontos intermediários do trajeto podem servir para roubar dados, por exemplo, diz o especialista em infraestrutura de redes Jefferson Castanheira.

Os serviços de VPN, em si, não são ilegais. Mas dependendo do tipo de uso, você pode cometer infrações. Por exemplo, ar conteúdos que são proibidos no Brasil, via plataformas de streaming, pode ser suficiente para haver consequências jurídicas.

*Com informações da Reuters e reportagem de Rodrigo Lara.