본문 바로가기

지식 창고/Computer ETC...

구글 Analytics 보안문제발견 ★

오늘아침에 출근하자마자 메일을 보니 깜짝놀랄 글이있었습니다.

구글 Analytics에 보안결함이 있다는 말과 함께 대안이 메일로 올라왔더군요

혹시 메일못보신분들을 위해 E-mail전문을 복사해서 붙여넣겠습니다.

이거 저작권에 걸리는거 아니겠죠??

안녕하십니까, 웹사이트 최적화도구 사용자님,

웹사이트 최적화도구에 보안 문제가 발생할 수 있어 알려 드립니다. 해커가 웹사이트 최적화도구 제어 스크립트의 취약점에 크로스 사이트 스크립팅(XSS) 공격을 시도하여 귀하의 사이트에서 악성 코드를 실행할 가능성이 있습니다. 이 공격은 별도의 공격에 의해 웹사이트 또는 브라우저가 이미 피해을 입은 경우에만 발생할 수 있습니다. 이 공격이 당장 발생할 가능성은 낮지만 예방 차원에서 사이트 보호 조치를 취하시기 바랍니다.

이제 버그가 수정되어 새로 생성하는 실험은 모두 안심하고 사용할 수 있습니다. 하지만, 현재 실행 중인 실험은 모두 업데이트하여 사이트에서 버그를 수정해야 합니다. 또한, 2010년 12월 3일 이전에 생성되었다가 일시중지 또는 중단된 실험에서 웹사이트 최적화도구 스크립트를 가져온 경우에는 해당 코드를 삭제하거나 업데이트해야 합니다.

코드를 업데이트하는 방법은 두 가지입니다. 현재 실험을 중단하고 이전 스크립트를 삭제한 다음 새 실험을 만들 수도 있고, 사이트에서 직접 코드를 업데이트할 수도 있습니다. 더 간단한 방법인 새 실험 만들기를 사용할 것을 강력히 권장합니다.

새 실험 만들기

  1. 현재 실행 중인 웹사이트 최적화도구 실험을 모두 중단합니다.
  2. 사이트에서 웹사이트 최적화도구 스크립트를 모두 삭제합니다.
  3. 평상시와 같은 방법으로 새 실험을 만듭니다. 새 실험은 해킹으로부터 안전합니다.

웹사이트 최적화도구 제어 스크립트를 직접 업데이트하기

  1. 사이트에서 제어 스크립트를 찾습니다. 스크립트의 형태는 다음과 같습니다.

A/B 테스트 제어 스크립트
<!-- Google Website Optimizer Control Script -->
function utmx_section(){}function utmx(){}
(function(){var k='XXXXXXXXXX',d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);return c.substring(i+n.
length+1,j<0?c.length:j)}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash;
d.write('<sc'+'ript src="'+
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com'
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
'" type="text/javascript" charset="utf-8"></sc'+'ript>')})();
</script><script>utmx("url",'A/B');</script>
<!-- End of Google Website Optimizer Control Script -->

다변수 테스트 제어 스크립트
<!-- Google Website Optimizer Control Script -->
function utmx_section(){}function utmx(){}
(function(){var k='XXXXXXXXXX',d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);return c.substring(i+n.
length+1,j<0?c.length:j)}}}var x=f('__utmx'),xx=f('__utmxx'),h=l.hash;
d.write('<sc'+'ript src="'+
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com'
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
'" type="text/javascript" charset="utf-8"></sc'+'ript>')})();
</script>
<!-- End of Google Website Optimizer Control Script -->

  1. 제어 스크립트 return c.substring(...을 찾습니다.
  2. 다음과 같이 수정합니다.
    수정 전: return c.substring(i+n.length+1,j<0?c.length:j)
    수정 후: return escape(c.substring(i+n.length+1,j<0?c.length:j))
    맨 끝에 닫는 괄호 ')'를 반드시 넣으십시오.

수정 후의 A/B 제어 스크립트
<!-- Google Website Optimizer Control Script -->
function utmx_section(){}function utmx(){} (function(){var k='XXXXXXXXXX',d=document,l=d.location,c=d.cookie;function f(n){ if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);
return escape(c.substring(i+n.length+1,j<0?c.length:j))}}}
var x=f('__utmx'),xx=f('__utmxx'),h=l.hash; d.write('<sc'+'ript src="'+
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com'
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
'" type="text/javascript" charset="utf-8"></sc'+'ript>')})();
</script><script>utmx("url",'A/B');
</script>
<!-- End of Google Website Optimizer Control Script -->

수정 후의 다변수 제어 스크립트
<!-- Google Website Optimizer Control Script -->
function utmx_section(){}function utmx(){}
(function(){var k='XXXXXXXXXX',d=document,l=d.location,c=d.cookie;function f(n){
if(c){var i=c.indexOf(n+'=');if(i>-1){var j=c.indexOf(';',i);
return escape(c.substring(i+n.length+1,j<0?c.length:j))}}}
var x=f('__utmx'),xx=f('__utmxx'),h=l.hash; d.write('<sc'+'ript src="'+
'http'+(l.protocol=='https:'?'s://ssl':'://www')+'.google-analytics.com'
+'/siteopt.js?v=1&utmxkey='+k+'&utmx='+(x?x:'')+'&utmxx='+(xx?xx:'')+'&utmxtime='
+new Date().valueOf()+(h?'&utmxhash='+escape(h.substr(1)):'')+
'" type="text/javascript" charset="utf-8"></sc'+'ript>')})();
</script>
<!-- End of Google Website Optimizer Control Script -->

위의 제어 스크립트 예에서 k=XXXXXXXXX 행은 자리표시자입니다.

이 업데이트를 적용한 후에도 실험은 정상적으로 계속 진행됩니다. 실험을 일시중지하거나 다시 시작하지 않아도 됩니다.

Google은 웹사이트 최적화도구의 보안 유지를 위해 최선을 다하고 있으며 이번 문제가 발생한 것에 대해 유감스럽게 생각하고 있습니다. 앞으로 이러한 문제가 발생하지 않도록 최선을 다하겠습니다.


감사합니다.
Trevor
Google 웹사이트 최적화도구 팀