ディープリンク防止機構を実現する MovableType プラグイン:MTDeepLinkBLocker

Posted by
ぴろり
Posted at
2005/08/09 18:30
Trackbacks
関連記事 (1)
Comments
コメント (2)
Post Comment
コメントできます
Category
プラグイン カテゴリ
 ブログの特徴の一つとして、Web 上のコンテンツと URL を一意に対応付ける パーマリンク(Permalink)の存在を挙げることができます。 この恩恵にあずかって、自分の書いた記事の中で言及したブログ記事やサイトにディープリンクを貼るブロガーも多いことでしょう。 ブログを知っている人にしてみれば、これらリンクはブログの醍醐味とも言うべき極めて自然なことのようですが、 その一方で、世の中には無断リンク禁止や下層コンテンツへのディープリンク禁止を掲げるサイトも少なくありません。 書いたコンテンツを Web に公開したいと思うものの、 URL の悪質な晒し上げなどからコンテンツを保護したいという(言わば我侭な)ニーズは確かにあるようです。

 そこで今回、MovableType でディープリンク防止機構を実現するためプラグインを作成してみました。 MovableType でパーマリンクを捨てることの意味があるのか、いささか疑問ではありますが、 まぁシステム上実現できるに越したことはありません。 それを如何に使うか、それはユーザ次第ということで…

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

はじめに

 ARTIFACT ―人工事実― : 自分が想定していないリンクを拒否するシステム/コメント欄の高機能化 では、無断リンクやディープリンクに関する様々なサイトでの考察やソリューションが数多く集められています。 この記事が今回のプラグインの作成の大きな動機となった訳ですが、 無断リンクやディープリンク問題を考える上で、非常に有用なリンクとして活用できました。 ここでは、ディープリンク、直リンク禁止のためのソリューションとして Cookie を使用した一例が紹介されていますが、 ARTIFACT から辿り付いた いしなお!:人によってパーマリンクが異なるシステム 実装例では、 Cookie と PHP を利用してユーザ毎にパーマリンクが異なる PHP のサンプルコードを公開されています。 今回、作成したプラグインは、こちらの PHP スクリプトを参考にしています。

これらエントリを基点として、rir6システムモヒカン族といった興味深い単語に出会えます(笑)

 このプラグインの導入により、個別エントリへのパーマリンク URL は、ユーザ毎エントリ毎に異なったものになります。 その URL は一人のユーザ専用となり、そのユーザ以外のアクセスを検知することが可能になります。 その URL にアクセスするには、サイトトップのインデックスなど規定のページを経由し、 認証用 Cookie の発行を受ける必要があります。 これにより、不特定多数が Cookie の発行を受けない特定のエントリへのディープリンクを直接辿ることをできなくします。 ディープリンクを拒否する具体的な仕組み(コード)については いしなお!:人によってパーマリンクが異なるシステム 実装例 を参照してください。

仕様と制限

 プラグインは、正確には、MovableType のシステムでディープリンクを拒否するのではなく、 ディープリンクを拒否するための PHP スクリプトを、 MovableType のプラグインから簡単に埋め込めるようにしてあります。 これによりテンプレートに PHP スクリプトを直接書く手間を省き、コードの見通しを良くします。 実際にディープリンクを拒否するのは PHP がその役割を担いますので、サーバで PHP が動作する必要があります
  • 同じエントリであっても、ユーザ毎にパーマリンクが異なります【下記 URL(1),(3)】
  • 同じユーザであっても、エントリ毎にハッシュ値が異なります【下記 URL(1),(2)】
  • Cookie の認証を受けていないユーザは URL(1),(2),(3) に直接アクセスできません
  • 既に Cookie の認証を受けたユーザ A は、ブックマークなどから URL(1),(2) に直接アクセスすることができます
  • Cookie の認証が行われるページを自由に設定できます
ユーザ A のためのパーマリンクの例:
(1) http://www.magicvox.net/archive/2005/08091234.php?4f5e6d3c
(2) http://www.magicvox.net/archive/2005/08012468.php?fe603876
ユーザ B のためのパーマリンクの例:
(3) http://www.magicvox.net/archive/2005/08091234.php?3360ff6c

追加されるテンプレートタグ

MTUseDeepLinkBlocker
ディープリンク防止機構を使用するページの先頭に必要です。 このタグはディープリンク防止機構に必要な PHP スクリプトを書き出します。
authorize
authorize が 1 の時、そのページは認証用 Cookie を発行します。 引数に authorize を持つ MTUseDeepLinkBlocker タグが記述されたページからリンクされた時のみ、 ディープリンク防止機構を持つページを表示することができます。
thru
thru が 1 の時、そのページはディープリンク防止機構が動作しません。 MTDeepLinkDenied は常に偽となり、MTDeepLinkProtected は常に真となります。 このオプションの具体的な活用事例は 特定カテゴリの記事へのディープリンクを防止する MTDeepLinkBlocker 0.11を参照してください。
MTDeepLinkBlockerHash
ユーザの認証用 Cookie とエントリID から、認証に必要なハッシュを生成します。 パーマリンクの後にこのハッシュを続けます。
<MTEntries>
<a href="<$MTEntryPermalink$><$MTDeepLinkBlockerHash$>"><$MTEntryTitle$></a><br />
</MTEntries>
MTDeepLinkDenied
認証が済んでいないリクエスト時に真となるコンテナタグです。 逆条件は MTElse ではなく、後述の MTDeepLinkProtected を使ってください。
MTDeepLinkProtected
認証済みのリクエスト時に真となるコンテナタグです。 逆条件は MTElse ではなく、前述の MTDeepLinkDenied を使ってください。

導入方法

Step 0.プラグインのインストール
 プラグインをダウンロードし、 アーカイブに含まれるMTDeepLinkBlocker.plを MovableType のプラグインディレクトリにコピーします。 そして、MovableType の管理画面のメインメニューで、"使用可能なプラグイン"欄に表示されていることを確認します。
Step 1.インデックスページのテンプレートを修正
 インデックスページからリンクを辿った場合のみ、個別エントリを表示する一例を紹介します。 認証を受けていないユーザは、必ずこのページからリンクを辿る必要があります。 この作業で重要なテンプレートタグは MTUseDeepLinkBlockerMTDeepLinkBlockerHashです。
<MTUseDeepLinkBlocker authorize="1">
<!-- このページで認証用 Cookie が発行されます -->
<!-- MTUseDeepLinkBlocker は必ずページの先頭に置いてください -->

<body>
<MTEntries>
<!--個別記事へのパーマリンクに続けて認証用ハッシュを追加します-->
<a href="<$MTEntryPermalink$><$MTDeepLinkBlockerHash$>"><$MTEntryTitle$></a><br />
</MTEntries>
</body>
Step 1.個別エントリへのディープリンクを禁止する
 個別エントリアーカイブにディープリンクされた場合、異なるコンテンツを表示する一例を紹介します。 一度、認証を受けたユーザは、Cookie が有効な間のみ、ディープリンクを直接辿ることができます。 この作業で重要なテンプレートタグはMTDeepLinkDeniedMTDeepLinkProtectedです。
<MTUseDeepLinkBlocker>
<!-- MTUseDeepLinkBlocker を忘れずに置いてください -->

<body>

<MTDeepLinkDenied>
このページを直接表示することはできません。
インデックスページから辿ってください。
</MTDeepLinkDenied>

<MTDeepLinkProtected>
ここにディープリンクから保護されたコンテンツを記述します。
認証済みのユーザは、Cookie が有効な間のみ直接にリンクを辿ることができます。
</MTDeepLinkProtected>

</body>

トラブルシュート - 動かない時は?

 この項目は作成中です。

いろいろ

  • PHP スクリプトにより 1 ページにつきファイルサイズが約1KB増加します
  • オリジナルの著作権表示を改変しない限り、自由に改造・転載・配布できます

作ってはみたものの、今のところ自分のサイトで使う予定も無く(´・ω・`)

ダウンロード

ダウンロード / MD5バージョン日付サイズ(Bytes)動作環境備考
MTDeepLinkBlocker
GetMD5Hash('MTDeepLinkBlocker011.zip');?>
0.11 new '05/08/19 GetFileSize('MTDeepLinkBlocker011.zip');?> MovableType 3.151-ja で動作確認

最新版のダウンロードやバグレポートはDeepLinkBlocker の trac レポジトリでも行っています。

ページ下方の Download in other formats → Original Format で取得できます。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  



関連記事/トラックバック (全 1 件中、最新 5 件まで表示しています)

Open MagicVox のスクリーンショット
タイトル
特定カテゴリの記事へのディープリンクを防止する MTDeepLinkBlocker 0.11
Trackbacked at
2005/08/19 23:59
from
Open MagicVox
概要
 先日公開しました MTDeepLinkBlocker をバージョンアップしまし...

この記事にトラックバックを送るには?

寄せられたコメント (全 2 件中、最新 5 件まで表示しています)

Posted by
ぴろりぴろり
at
2005/11/17 16:03
ID
y6MbTuC2
動作を確認できるようサンプルページを"はじめに"の節に設置しました。
Posted by
ぴろりぴろり
at
2005/08/09 20:34
ID
UsIuUa5c
MTDeepLinkBlockerのソースを見ると明らかですが、
プラグインで拡張したテンプレートタグでやっていることのほとんどは
PHPスクリプトを書き出すことだけなんですね。
実際の処理は、書き出されたPHPが頑張ってくれています。
…と、これを書いていて思ったんですが。
例えば、アクセスカウンタのPHPスクリプトを書き出すプラグインを作って
<MTEmbeddedCounter type="normal" figure="6">
みたいな書式で、ブログに埋め込めるようにしてやるんです。
PHP製の様々なパーツをプラグインというパッケージにして
簡単に配布、導入することができるんでないか、と。

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。