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

Alibaba: ataque à gigante chinesa compromete dados de 1 bilhão de pessoas

Getty Images
Imagem: Getty Images

Aurélio Araújo

Colaboração para Tilt

17/06/2021 12h47

A Alibaba, gigante chinesa do ramo de comércio eletrônico, foi vítima de um ataque hacker que vazou dados sensíveis de consumidores ao longo de vários meses, segundo um caso judicial encerrado na China neste mês.

De acordo com informações da Bloomberg, o ataque foi realizado por um funcionário de uma empresa de consultoria que ajuda comerciantes a vender no Taobao, site de compras que pertence ao grupo Alibaba.

Para a Justiça chinesa, o funcionário foi responsável por vazar, desde 2019, mais de um bilhão de dados, que incluem nomes de usuário e números de telefone. Como consequência, ele e seu empregador receberam uma sentença de mais de três anos de prisão, além de multas que chegam a um valor de aproximadamente R$ 352 mil.

De acordo com a Alibaba, nenhum dos dados foi vendido e nenhum usuário da plataforma teve prejuízos financeiros com o episódio.

Com as informações sobre o caso chegando à imprensa, as ações da Alibaba na bolsa de valores de Hong Kong caíram mais de 1%.

"O Taobao dedica recursos consideráveis para combater a coleta de dados não autorizada em nossa plataforma, já que a privacidade e a segurança nos são da maior importância", informou um porta-voz do Taobao. De acordo com ele, foi o próprio site que descobriu o hackeamento.

Mudanças políticas na internet chinesa

No entanto, a situação se dá num momento em que o governo chinês quer aumentar o controle sobre os gigantes da internet no país, como a Alibaba e a Tencent (conglomerado chinês que desenvolve o WeChat), que lidam diariamente com a coleta de informações de milhões de consumidores.

O governo de Xi Jinping deseja que a China seja uma das líderes mundiais em big data, área que estuda como obter informações a partir de grandes conjuntos de dados. Pequim vem investindo muito em centros de processamento de dados e outras infraestruturas digitais para que a informação seja um dos pilares da economia nacional.

Ao mesmo tempo, porém, o governo tenta conter a influência desses grandes grupos privados, que já trabalham com coleta de dados.

Uma nova política sobre segurança de dados entra em vigor na China a partir de setembro, dando poder ao governo para dissolver ou multar empresas de tecnologia que tenham problemas com a gestão desses dados. Além disso, uma nova legislação sobre proteção de informações pessoais está sendo desenvolvida no país atualmente.