../

見たくない画像を貼り付けられるのを防ぐ (自サイトの画像のみ許可)

概要

いまのところ事故に会ったことはないのですが、URL貼り付け放題のwikiにとって、開いたページにいきなりドカンとグロ画像が貼られたり、エロ広告画像が貼られたりということがあるんじゃないかという心配を減らします。

PKWK_DISABLE_INLINE_IMAGE_FROM_URIとの違い

既存の設定項目PKWK_DISABLE_INLINE_IMAGE_FROM_URIを有効にするとすべての画像が文字列として表示されますが、自サイト内にある画像ファイルでありさえすれば画像として表示される部分が異なります。

なお、「自サイト内の画像は安全」という前提ですので、pukiwikiへのファイル添付が自由に行える状況や、サイト内に画像掲示板系のCGIがある場合には無意味です。(ただし後者の場合は、問題のあるURLを禁止指定にするよう改造するという手はあります。)

実施概要

変更箇所

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

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

  1. wikiのmake_linkにより、画像系拡張子を持つURLがimgタグに変換されるのを防止。
  2. refプラグインにより、外部サイトから画像を持ってくるのを防止。
  3. imgプラグインを削除。

まずmake_linkですが、これは設定項目があるのでそれを利用。/pukiwiki.ini.phpを開き、以下の行の矢印部分を0から1へ変更します。

if (! defined('PKWK_DISABLE_INLINE_IMAGE_FROM_URI'))
	define('PKWK_DISABLE_INLINE_IMAGE_FROM_URI', 0); //←ここを1に変更

refプラグイン側には、以下の要素を盛り込みます。

  1. 第1パラメタが「http://」ではじまるとき、エラーとして処理する。
  2. 上記のPKWK_DISABLE_INLINE_IMAGE_FROM_URIを1に変えることにより、ref自身もimgタグではなくaタグを出力するようになるので、これを常にimgを出力するように変更する。

「http://」防止のほうは、/plugin/ref.inc.phpを開き、以下の通り数行追加します。

// 第一引数: "[ページ名および/]添付ファイル名"、あるいは"URL"を取得
$name = array_shift($args);
$is_url = is_url($name);

 //※↑ここまで既存部分
 //※↓ここから追加部分

if($is_url)
{
	//※↓「アクセス先のURLがhttp://~.domain.jp/のサイト中ではない場合にエラーとする」の改造例。
	//if(0==preg_match('/^http:\/\/[\w]+\.domain\.jp\//',$name))

	//※↓「アクセス先がhttp://を含んでいたらエラーとする」の改造例。
	if(FALSE===strpos('http://',$name))
	{//サイト外を呼び出していたらエラーとする
		$params['_error'] = 'このプラグインでサイト外へアクセスすることは出来ません。';
		return $params;
	}
}

//※↑ここまで追加部分

PKWK_DISABLE_INLINE_IMAGE_FROM_URIのほうを常にimgにするのは、以下のようにrepプラグイン内の一部分をコメントアウトすることで処置。

//	if (PKWK_DISABLE_INLINE_IMAGE_FROM_URI) {
//		//$params['_error'] = 'PKWK_DISABLE_INLINE_IMAGE_FROM_URI prohibits this';
//		//return $params;
//		$url = htmlspecialchars($name);
//		$params['_body'] = '<a href="' . $url . '">' . $url . '</a>';
//		return $params;
//	}

最後にimgプラグインですが、こちらは過去互換性のためだけに残っているようなので、使用していなければプラグインごと削除しておくのが手っ取り早いでしょう。

コメント


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2009-02-12 (木) 20:44:15
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.248 sec.

SourceForge