埋め込みが私のサイトの1つに深刻な被害をもたらした
原文は Unattributed により に公開されました。 このブログを購読する
写真:Олег Мороз(Unsplashより)
はじめに
数日前、Michael HarleyがHow I make my blog posts more resilientという記事を公開しました。ブログや、ほぼあらゆるウェブサイトを維持するための優れたアイデアや原則が数多く紹介されています。この記事を読んで、約10年前に自分のサイトの1つでかなり大きなトラブルに見舞われたときのことを思い出しました。
当時、問題については大まかに記録したものの、対応しなければならなかった問題の1つである壊れたサードパーティの埋め込みについては、一部しか触れていませんでした。そこで、自分が遭遇した問題とその対処法について書くことが、Michaelの記事の補足としてふさわしいのではないかと思いました。
きっかけ
2018年に、私はThe CerebralRiftに多くの変更を加える必要がありました。(これらの変更の詳細は、2018年に投稿した記事CerebralRift Goes KABOOM!、Extreme Website Cleaning、The Long Grind Aftermath、そしてA Pair Of Post Cleanup Rantsで読むことができます。ただし、おすすめはしません。長くて愚痴っぽく、それでいてなぜか退屈な内容です。)ここでは、当時の記事で触れたよりも詳しく、その変更の一部に焦点を当てます。
変更を進める中で、サイトにいくつもの問題があることに気づきました。変更を重ねるごとに問題は悪化するばかりでした。(変更の多くはコンテンツの移動や削除だったので、事態が悪化するのは直感に反しているように思えました。)すぐに、問題を解決するにはより深い調査が必要だとわかりました。
わかったこと
見つかった問題の1つは、サイトでの埋め込みの使い方に関するものでした。私が書いたレビューのほとんど(約350本)で、レビューの一部として対象の作品を埋め込むようにしていました。これは主に読者への配慮からでした。レビューを読んでいる対象を、その場で聴いたり見たりできるようにしたかったのです。
しかし、元の音源や映像が移動したり、インターネット上から消えたりした際に、これらの埋め込みのいくつかがグレースフルに失敗しなかったのです。グレースフルに失敗するとはどういうことでしょうか。
呼び出された際、埋め込みは渡されたURLやURIが有効かどうかを確認できるべきです。有効でなければ、埋め込みは失敗すべきなのです。しかし、これらの埋め込みのいくつかではそうはなりませんでした。代わりに、次の2つのうちどちらかが起こりました。
- 埋め込みが延々と読み込みを試み続け、ウェブページが最後まで読み込まれない。
- 埋め込み自体は読み込まれるものの、12〜16個の不正な形式のURIを抱えている。
これはサイトのパフォーマンスや、多くの検索エンジンが行うサイト評価に影響を与えました(はい、当時はSEOの原則に関わっていました。でも今はもう大丈夫です)。ハングした埋め込みは極端に長い読み込み時間として評価され、不正な形式のURIはリンク切れと見なされました。つまり、これらの壊れたリンクはSEOの評価だけでなく、サイト運営で監視すべき純粋な技術的指標にも大きな悪影響を及ぼしていたのです。
しかし、他にも気がかりなことがありました。こうした不具合を起こす埋め込みが攻撃面として利用される可能性はないのだろうか、ということです。直感的にはサーバー自体に問題はないと思いましたが、サイトを利用するユーザーにとっては脆弱性になり得ると考えました。心配性な私は、この壊れた埋め込みをセキュリティ上の問題と見なしました。(正直、この点については何度も考えが揺れました。壊れた埋め込みを経由してサーバーにまで侵入される方法があるのではないかと思うこともありました。単なる取り越し苦労の症状ですが。)
とった対策
おそらくお分かりでしょうが(特に上記で触れた記事を読めばなおさらです)、私はサイトに投稿されていた400本以上の記事を1つひとつ丹念に確認していきました。(影響を受けていたのはレビューだけではありませんでした。)その過程で、更新が必要な記事はすべて更新・リフレッシュしました。
これは長い道のりでした。すべてをきれいにするのに文字通り何日もかかりました。その間に、今後どう進めていくかをじっくり考えました。
新しいポリシー
私のサイトでは、極めて稀で具体的な理由があってどうしても必要という場合を除き、サードパーティの埋め込みはもう歓迎しません。あれから10年近く経ちますが、使う必要があったケースは思い当たりません。
当時は考えていなかったものの、今となっては関連があると思えることがもう1つあります。こうした埋め込みの多くが、私たちのシステム上での状態を追跡するためにCookieを使う必要があることは以前からわかっていました。しかし、私たちの誰が、これらの埋め込みが実際に何をしているのか本当にわかっているでしょうか。ビーコンCookieや、その他のクロスサイトでアクセス可能なデータを私たちのシステムに残している可能性は十分にあります。
そして、私の知る限り(もし間違っていたら訂正してください)、埋め込みが何をできるかを規制するGDPRに相当するものは存在しません。そう考えると、少し落ち着かない気持ちになります。
といっても、私のサイトにメディアがまったくないわけではありません。CerebralMix Archiveはその好例で、ほとんどのページにメディアプレーヤーが設置されています。しかし、そのメディアプレーヤーは純粋なHTML5コードで作られています。何らかの理由で失敗した場合はエラーメッセージが表示されるように作られていますし、メディアを直接ダウンロードするための独立したリンクも用意してあるので、プレーヤーがうまく動作しなくてもユーザーはメディアにアクセスできます。
リッチメディアをウェブサイトに載せることが当たり前になっているこの時代に、このポリシーは時代遅れに思えるかもしれません。しかし正直なところ、このおかげでサイトのメンテナンスは楽になりました。そして、自分のウェブサイトに時限爆弾を抱えていないと思うと、少し安心して眠れるようになりました。
記事をランダムに読む
コメント
ログインしてコメントする