[[../]]
RIGHT:&size(12){Category:[[Design>:Design]]};
*内部・外部リンクを区別し、外部リンクにメッセージをつける [#efa9da7d]

**概要 [#ge4cffea]

ネットゲーム系でちょっとでも人の多いwikiには、RMT業者が広告を、ウィルス配布者がアカウントハックウィルスを含むファイル(主に*.exe)へのURLをバシバシ貼り付けてきます。

URLが貼り付け放題のwikiにおいて、閲覧者がおかしなサイトに飛ばないようにwiki管理者側で制限をかけることを実現します。

**実施概要 [#mb58fa8a]

-wikiのmake_linkで、指定されたURLひとつずつについてランキングを行い、ランクに応じてhtmlタグを作成します。
-ランキング判断情報を追加します。
-外部サイトマークを定義します。

ランキングには以下の4タイプを用意します。

:内部リンク(inner)	|サイト内リンクです。
:認可リンク(approve)	|管理者が知っている無害なサイトへのリンクです。
:禁止リンク(forbid)	|管理者が知っている有害なサイトへのリンクです。
:未知リンク(unknown)	|管理者の知らないサイトです。

**実施結果 [#xd7492a9]

wiki内のリンクは以下のように表示されます。

内部リンクは、(自身に自信がある限り)安全であり、警告などを表示しません。

 前:http://inner.site/
 後:http://inner.site/

認可リンクは、おそらく安全なので警告はしませんが、外部サイトである旨は表示します。

 前:http://approve.site/
 後:http://approve.site/[→]

禁止リンクは、その場所に危険なURLが貼られたことを表示し、リンクは表示しません。

 前:http://forbid.site/
 後:(この場所に危険なリンクが貼られました。他の部分も信用しないで下さい。)

未知のリンクは、外部サイトであることを表示し、危険性が不明である旨を警告します。

 前:http://unknown.site/
 後:http://unknown.site/[→](このサイトは危険かもしれません)

**変更箇所 [#a14e5c25]

pukiwiki1.4.7で実施しています。

やることは大きく4箇所です。

+wikiのmake_linkに、危険度ランキング判断とhtmlタグを作成するfunctionを定義。
+wikiのmake_linkに、従来は<a>タグを自作していた部分で、上記functionを通して作成するよう振り向け措置。
+rules.iniに、ランキング判断情報を追加。
+外部サイトマークを定義。

まず/rules.ini.phpに、以下のようにランキング判断情報を追加。設定はもちろん各自用に変更してください。

-添付ファイル:[[うちのページ>http://aden.jias.jp/dt/?PukiWiki%B2%FE%C2%A4%2F%A5%EA%A5%F3%A5%AF%A4%CE%C6%E2%B3%B0%C8%BD%C4%EA]]の''link_permission_list.txt''

この変数は単純な配列で、その要素は連想配列が入っています。この連想配列の内容は以下の通りです。

:lank|
危険度ランクです。inner、approve、forbidのいずれかが入ります。このリストに該当しないものはすべて未知扱いです。
:url|
URLです。正規表現(ただし/exp/のような前後のスラッシュはつけない)です。ひとつずつマッチさせて調べます。
:notice|
メッセージです。禁止リンクが貼られた場合に、リンクを表示せず、それが危険である理由を説明します。noticeがない場合はデフォルトの警告メッセージを表示しますので、必須ではありません。

次に、ランキング判断functionを作成します。/lib/make_link.php内のどこかに、以下のfunctionを貼り付けて作成完了です。長いのでテキストファイルで。

-添付ファイル:[[うちのページ>http://aden.jias.jp/dt/?PukiWiki%B2%FE%C2%A4%2F%A5%EA%A5%F3%A5%AF%A4%CE%C6%E2%B3%B0%C8%BD%C4%EA]]の''checkoutersiteurl.txt''

そして、<a>タグを自作している部分を、上記functionを通して作成するように変更します。/lib/make_link.php内には3箇所の該当個所があるので、すべて改造します。

 class Link_url extends Link
 ~略
 	function toString()
 	{
	~略
 		//return '<a href="' . $this->name . '"' . $rel . '>' . $this->alias . '</a>';
 		return checkOuterSiteURL($this->name,$this->alias);
 	}

 class Link_url_interwiki extends Link
 ~略
 	function toString()
 	{
 		//return '<a href="' . $this->name . '" rel="nofollow">' . $this->alias . '</a>';
 		return checkOuterSiteURL($this->name,$this->alias);
 	}

 class Link_mailto extends Link
 ~略
 	function toString()
 	{
 		//return '<a href="mailto:' . $this->name . '" rel="nofollow">' . $this->alias . '</a>';
 		return checkOuterSiteURL('mailto:'.$this->name,$this->alias);
 	}

最後に外部マークの定義ですが、cssの編集になります。/skin/pukiwiki.css.phpを開き、以下のように付け加えます。

 div#body	a.external{
 	padding-left:16px;
 	background:url(outside.png) no-repeat left bottom;
 }

そして、outside.png(外向きリンクであることを示す画像)を適切な位置にアップロードすれば準備完了です。なお、「div#body」を付けるのを忘れると、メニューバーにも外部サイトマークがついてしまうので場合によっては不便です。付けておけば、本文部だけにマークがつきます。

*ヒント [#mcc9356f]

-ランキング判断情報は、リストの上にあるものほど優先度が高くなります。たとえばリストの一番上に「*.exe」を「禁止」にする設定をしておけば、「認可」サイト内にexeがある場合も「禁止」が優先されます。
-ウィキファームを作るなど、ひとつのサイト内にrules.iniが沢山できてしまうような使い方をしている場合は、ランキング判断情報を/lib/make_link.php内に直接書いておくと設定を共通化できます。

*すぺさるさんくす [#l5c6c3c6]

[[でぃあばぁ]]さんの [[cubic9.com:PukiWiki/改造/内部・外部リンクを区別する]] を改造させていただきました。m(_ _)m

*コメント [#a4d0b79c]
- こちらの需要でこんなもの考えてみました。突っ込みをお願いします。 -- [[フォルグロス]] &new{2006-10-21 (土) 18:14:36};
- お疲れ様です。これはいつ、誰による仕事で、でぃあばぁさんのどの仕事をどう改造したのですか? --  &new{2006-10-21 (土) 20:03:47};
- すいません、よくみたら経緯がぜんぜんなかったですね。[[BugTrack/730#v827bf64]]の会話にあった「内部・外部サイトを区別する」について、「外部サイトの危険性を判断する」機能を自分が取り付けたものです。 -- [[フォルグロス]] &new{2006-10-22 (日) 20:49:46};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u12. HTML convert time: 0.055 sec.

OSDN