</> ! 無断コピーサイトが抱える致命的
な脆弱性
(外部スクリプト依存)

他人のウェブサイトを丸ごとコピーして運営する悪質なサイトがあります。

しかし、このような不正行為には、実はコピーサイトの運営者自身が気づいていない大きなリスクが潜んでいます。
それは、セキュリティ上の致命的な欠陥です。

関連記事

1. 丸ごとコピーは危険なこと

ウェブサイトを丸ごとコピーする際、HTMLだけでなくJavaScriptの読み込みタグ(scriptタグ)もそのままコピーされることがあります。

scriptタグをコピーすることの意味 元サイト example.com <script src= “main.js”> </script> コピー コピーサイト copy-site.com <script src= “main.js”> </script> 元サイトがJSを変更 → コピーサイトに反映

例えば、元サイトに以下のようなコードがあったとします。

<script src="https://example.com/main.js"></script>Code language: HTML, XML (xml)

コピーサイトがこれをそのまま複製すると、コピーサイトは「example.comが配信するJavaScriptファイル」を読み込んで実行することになります。

ここで重要なのは、元サイトの管理者は、このJSファイルの内容を自由に書き換えられるという点です1

1.1. 他人に制御権を渡している

通常、ウェブサイトのセキュリティでは「信頼できないソースからスクリプトを読み込んではいけない」というのが鉄則です2
外部のサーバーから配信されるコードを無条件で実行すると、そのサーバーの管理者に自分のサイトの動作を操られてしまうからです。

コピーサイトは、まさにこの原則を破っています。
元サイトの管理者に、自サイトの動作の制御権を渡してしまっているのです。

これは技術的には、外部スクリプトへの無条件な依存という脆弱性を作り込んでいる状態だと捉えています3

2. 具体的に何ができてしまうのか

元サイトの管理者がJSファイルの内容を書き換えた場合、コピーサイトでは次のようなことが起こり得ます。

具体的に何ができてしまうのか リダイレクト 訪問者を 元サイトへ転送 表示破壊 CSSを削除 デザイン崩壊 無限ループ ブラウザ フリーズ 実際に行うと法的問題の可能性 不正指令電磁的記録供用罪など

リダイレクト処理の例(疑似コード):

// 参照元のドメインをチェック
if (document.location.hostname !== 'example.com') {
  // 元サイトに強制転送
  window.location.href = 'https://example.com';
}Code language: JavaScript (javascript)

この場合、コピーサイトを訪れたユーザーは自動的に元サイトに飛ばされます。
コピーサイトの運営者にとっては、訪問者が一切得られない状態です。

表示を破壊する例:

// コピーサイトでのみCSSをすべて削除
if (document.location.hostname !== 'example.com') {
  document.querySelectorAll('style, link[rel="stylesheet"]').forEach(el => {
    el.remove();
  });
}Code language: JavaScript (javascript)

これでコピーサイトのデザインは完全に崩壊します。

もっと言えば、無限ループを仕込んでブラウザをフリーズさせることも、技術的には可能です4
もちろん、実際にこうした技術的な反撃を行うことは、不正指令電磁的記録供用罪(いわゆるウイルス罪)や威力業務妨害罪に該当するリスクがあるため、被害者であっても実行すべきではありません5

ただ、コピーサイトの運営者は、元サイトから見た目やコンテンツを盗むことには成功しても、しかし同時に、元サイトが配信するコードを信頼して実行するという、セキュリティ上あり得ない設計を採用してしまっているのです。

3. 不正は技術的にも破綻している

無断コピーサイトは、倫理的に問題があるだけでなく、技術的にも根本的な欠陥を抱えています。

ウェブセキュリティの基本原則を無視した結果、自らを攻撃可能な状態にしてしまっている。
これは、不正行為を行う者が同時に技術的な無知も露呈しているケースだと言えます。

盗むことは、割に合わないのです。

  1. 外部スクリプトの改ざんリスクを防ぐ技術として、Subresource Integrity (SRI) があります。これはスクリプトファイルのハッシュ値を検証する仕組みで、ファイルが改ざんされた場合にブラウザが実行を拒否します。ただしコピーサイトがSRIを実装することは稀です。 – Subresource Integrity – MDN Web Docs
  2. この原則は「Same-Origin Policy(同一オリジンポリシー)」として知られるウェブセキュリティの基本概念に関連しています。異なるオリジン(ドメイン)からのリソースは制限されるべきという考え方です。 – Same-origin policy – MDN Web Docs
  3. 典型的なXSS脆弱性とは異なり、「信頼できない外部リソースへの依存」の問題です。XSSは通常、攻撃者が被害サイトにスクリプトを注入する脆弱性を指しますが、本ケースは外部のスクリプトソースを無条件で信頼することによるリスクです。Content Security Policy (CSP) などの対策技術で、外部スクリプトの実行を制御できます。 – Cross Site Scripting (XSS) – OWASP
  4. 無限ループによるブラウザのフリーズは、ユーザーの意図に反してコンピュータを正常に動作させなくする行為であり、不正指令電磁的記録供用罪や威力業務妨害罪に該当する可能性が高いです。被害者であっても、技術的な報復行為は法的リスクを伴います。 – サイバーセキュリティ関連法令 – 警察庁
  5. 不正指令電磁的記録に関する罪(刑法第168条の2、第168条の3)は、いわゆる「ウイルス罪」として知られ、コンピュータウイルスの作成・提供・供用などを処罰する規定です。意図に反する動作をさせるプログラムを実行させる行為が該当する可能性があります。 – 不正指令電磁的記録に関する罪 – e-Gov法令検索