【改ざん】見覚えのないコードが挿入されている。これは何?

作成・管理しているウェブサイトに身に覚えがないJavaScriptが挿入されている。

状況

管理しているウェブサイトに、見覚えのない不審なJavaScriptが<head>部分と</body>の前に挿入されている。

挿入されているJavaScriptのソースコード

<head>の後

<head><script>(function(){var b=window,f="chrome",g="wtsrt_",k="tbsd_",l="tbnd_",m="start",n="_wtsrt",p="_tbnd",q="CSI/";(function(){function h(a){this.t={};this.tick=function(a,d,c){this.t[a]=[void 0!=c?c:(new Date).getTime(),d];if(void 0==c)try{b.console.timeStamp(q+a)}catch(e){}};this.tick(m,null,a)}var a;b.performance&&(a=b.performance.timing);var r=a?new h(a.responseStart):new h;b.mobilespeed_jstiming={Timer:h,load:r};if(a){var d=a.navigationStart,e=a.responseStart;0<d&&e>=d&&(b.mobilespeed_jstiming.srt=e-d)}if(a){var c=b.mobilespeed_jstiming.load;0<d&&e>=d&&(c.tick(n,void 0,d),c.tick(g,n,e),c.tick(k,g))}try{a=
null,b[f]&&b[f].csi&&(a=Math.floor(b[f].csi().pageT),c&&0<d&&(c.tick(p,void 0,b[f].csi().startE),c.tick(l,p,d))),null==a&&b.gtbExternal&&(a=b.gtbExternal.pageT()),null==a&&b.external&&(a=b.external.pageT,c&&0<d&&(c.tick(p,void 0,b.external.startE),c.tick(l,p,d))),a&&(b.mobilespeed_jstiming.pt=a)}catch(s){}})();})();
</script>

</body>の前

<script>(function(){var c=window,f=document,l="chrome",m="tran",q="external",r="webkitvisibilitychange",s="start",t="sens_",u="req_",w="rcv_",x="prerender",y="ntsrt_",z="ntplt1_",A="ntplt0_",B="nsfs_",C="mobilespeed",D="https://csi.gstatic.com/csi",E="https:",F="http://csi.gstatic.com/csi",G="dns_",I="con_",J="_se",K="_req",L="_rcv",M="_ns",N="_dns",O="_con",P="_",Q="?v=3",R="=",S="1",T=".",U=",",V="&tran=",W="&tbsrt=",aa="&srt=",ba="&s=",ca="&rt=",da="&p=s",ea="&npnv=",fa="&npn=1",ga="&it=",ha="&apa=1",ia="&action=",
ja="&",X="";if(c.mobilespeed_jstiming){c.mobilespeed_jstiming.a={};c.mobilespeed_jstiming.b=1;var Y=function(b,a,e){var d=b.t[a],h=b.t.start;if(d&&(h||e))return d=b.t[a][0],void 0!=e?h=e:h=h[0],d-h},la=function(b,a,e){var d=X;c.mobilespeed_jstiming.srt&&(d+=aa+c.mobilespeed_jstiming.srt,delete c.mobilespeed_jstiming.srt);c.mobilespeed_jstiming.pt&&(d+=W+c.mobilespeed_jstiming.pt,delete c.mobilespeed_jstiming.pt);try{c[q]&&c[q][m]?d+=V+c[q][m]:c.gtbExternal&&c.gtbExternal[m]?d+=V+c.gtbExternal[m]():c[l]&&c[l].csi&&
(d+=V+c[l].csi()[m])}catch(h){}var g=c[l];if(g&&(g=g.loadTimes)){g().wasFetchedViaSpdy&&(d+=da);if(g().wasNpnNegotiated){var d=d+fa,n=g().npnNegotiatedProtocol;n&&(d+=ea+(encodeURIComponent||escape)(n))}g().wasAlternateProtocolAvailable&&(d+=ha)}var p=b.t,ka=p.start,g=[],n=[],k;for(k in p)if(k!=s&&0!=k.indexOf(P)){var v=p[k][1];v?p[v]&&n.push(k+T+Y(b,k,p[v][0])):ka&&g.push(k+T+Y(b,k))}delete p.start;if(a)for(var H in a)d+=ja+H+R+a[H];(a=e)||(a=E==f.location.protocol?D:F);return[a,Q,ba+(c.mobilespeed_jstiming.sn||
C)+ia,b.name,n.length?ga+n.join(U):X,d,ca,g.join(U)].join(X)},Z=function(b,a,e){b=la(b,a,e);if(!b)return X;a=new Image;var d=c.mobilespeed_jstiming.b++;c.mobilespeed_jstiming.a[d]=a;a.onload=a.onerror=function(){c.mobilespeed_jstiming&&delete c.mobilespeed_jstiming.a[d]};a.src=b;a=null;return b};c.mobilespeed_jstiming.report=function(b,a,e){if(f.webkitVisibilityState==x){var d=!1,h=function(){if(!d){a?a.prerender=S:a={prerender:S};var g;f.webkitVisibilityState==x?g=!1:(Z(b,a,e),g=!0);g&&(d=!0,f.removeEventListener(r,
h,!1))}};f.addEventListener(r,h,!1);return X}return Z(b,a,e)};var $=function(b,a,e,d){return 0<e?(d?b.tick(a,d,e):b.tick(a,X,e),!0):!1};c.mobilespeed_jstiming.getNavTiming=function(b){if(c.performance&&c.performance.timing){var a=c.performance.timing;$(b,N,a.domainLookupStart)&&$(b,G,a.domainLookupEnd,N);$(b,O,a.connectStart)&&$(b,I,a.connectEnd,O);$(b,K,a.requestStart)&&$(b,u,a.responseStart,K);$(b,L,a.responseStart)&&$(b,w,a.responseEnd,L);if($(b,M,a.navigationStart)){$(b,y,a.responseStart,M);$(b,
B,a.fetchStart,M);var e=c[q]&&c[q].startE;!e&&c[l]&&c[l].csi&&(e=Math.floor(c[l].csi().startE));e&&($(b,J,e),$(b,t,a.navigationStart,J));$(b,A,a.loadEventStart,M);$(b,z,a.loadEventEnd,M)}}}};})();
</script><script>(function(){var a=window,b="default_experiment",c="load",d="ol",e=a.mobilespeed_jstiming,f=e.load;a.top==a&&a.addEventListener(c,function(){f.name=c;f.tick(d);e.getNavTiming(f);setTimeout(function(){e.report(f,{e:b})},300)},!1);})();
</script></body>

原因・対処法

このJavaScriptは、サイトが改ざんされた等の管理者の不備によるものではありません

閲覧者の閲覧環境によるものです。

このJavaScriptは、「モバイル版 Google Chrome」利用者が「データ使用量を節約」機能をONにしている場合に自動的に挿入されています。

データ使用量を節約とは?

Googleが提供するモバイル端末向けのデータ圧縮サービスです。モバイル通信をGoogleのサーバーが仲介して、画像ファイルを圧縮するとともにその他の最適化(JavaScriptの挿入)を行っています。

また、デスクトップ版でもChrome拡張機能「データセーバー」を使用していると同様の事例が発生します。