../

Category:Design

内部・外部リンクを区別し、外部リンクにメッセージをつける

概要

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

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

実施概要

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

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

実施結果

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

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

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

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

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

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

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

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

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

変更箇所

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

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

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

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

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

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

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

そして、<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」を付けるのを忘れると、メニューバーにも外部サイトマークがついてしまうので場合によっては不便です。付けておけば、本文部だけにマークがつきます。

ヒント

すぺさるさんくす

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

コメント



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-09-06 (木) 10:48:35
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u8. HTML convert time: 0.384 sec.

OSDN