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

Coreia do Sul investiga relação de IPs dos EUA e de países da Europa com ciberataques

Funcionários do Sistema Sul-coreano de Transmissão checam estado de computadores enquanto tentam recuperar dados de servidor, um dia após ataque cibernético afetar emissoras de TV e bancos do país - AFP - 21.mar.2013
Funcionários do Sistema Sul-coreano de Transmissão checam estado de computadores enquanto tentam recuperar dados de servidor, um dia após ataque cibernético afetar emissoras de TV e bancos do país Imagem: AFP - 21.mar.2013

Do UOL, em São Paulo

25/03/2013 04h44

A polícia da Coreia do Sul divulgou nesta segunda-feira (25) que encontrou endereços de IPs (número de identificação de computadores) dos Estados Unidos e de três países europeus, como resultado de uma investigação em curso para encontrar os responsáveis pelos ataques cibernéticos sofridos por várias entidades do país na semana ada.

As autoridades policiais se limitaram a dizer que os endereços de protocolos da internet (IPs) dos EUA e de três países da Europa geraram códigos maliciosos que levaram ao blecaute generalizado dos computadores dos bancos Nonghyup, Shinhan e Jeju e das emissoras de televisão "KBS", "YTN" e "MBC".

A polícia sul-coreana solicitou que os governos dos quatro países - Estados Unidos e os três europeus que não foram identificados - cooperem com a investigação, informou a agência "Yonhap".

O organismo de controle de comunicações de Seul havia atribuído inicialmente o ataque a um endereço de IP chinês. Antes disso, a Coreia do Sul chegou a acusar a Coreia do Norte de realizar os ciberataques.

No entanto, na sexta-feira (22) a Comissão de Comunicações de Coreia (KCC) reconheceu que tinha cometido um erro ao confundir o suposto IP chinês com um endereço local utilizado pelo Nonghyup.

Ciberataque afeta TVs e bancos na Coreia do Sul

Os sistemas de informática das principais emissoras de televisão e de dois dos maiores bancos da Coreia do Sul ficaram completamente paralisados na última quarta-feira (20). 

Três cadeias de televisão - "KBS", "MBC" e "YTN" - e três bancos - Shinhan, Nonghyup e Jeju - informaram à Agência Nacional de Polícia que seus sistemas foram totalmente interrompidos por motivos desconhecidos.

Telas ficaram em branco, e imagens de crânios apareceram em alguns computadores. Um sindicalista da rede de televisão "KBS" indicou que todos os computadores do canal se apagaram de forma simultânea. "Seguimos transmitindo, mas os jornalistas tiveram dificuldades para enviar suas matérias porque não era possível entrar no sistema".

A rede de caixas automáticos e os serviços online do banco Shinhan sofreram graves complicações. No entanto, seu sistema informático foi parcialmente restaurado duas horas depois. (Com agências internacionais)