interwikiで画像CGIを埋め込むhack

  • ページ: BugTrack2
  • 投稿者: pai
  • 優先順位: 低
  • 状態: 保留
  • カテゴリー: その他
  • 投稿日: 2009-12-09 (水) 00:25:52
  • バージョン: 1.4.7

概要

渡されたパラメータから画像を生成するCGIに、InterWikiを使用してパラメータを渡そうというhackです。

変更点

--- make_link_091208.php	2009-12-08 23:46:47.898723100 +0900
+++ make_link.php	2009-12-09 00:20:51.576164200 +0900
@@ -186,7 +186,7 @@
 		$this->body = $body;
 		$this->type = $type;
 		if (! PKWK_DISABLE_INLINE_IMAGE_FROM_URI &&
-			is_url($alias) && preg_match('/\.(gif|png|jpe?g)$/i', $alias)) {
+			is_url($alias) && preg_match('/\.(gif|png|jpe?g)(\?|$)/i', $alias)) {
 			$alias = '<img src="' . htmlspecialchars($alias) . '" alt="' . $name . '" />';
 		} else if ($alias != '') {
 			if ($converter === NULL)
@@ -522,6 +522,9 @@
 			$script . '?' . rawurlencode('[[' . $name . ':' . $this->param . ']]') :
 			htmlspecialchars($url);
 
+		if (preg_match('/\.(gif|png|jpe?g)(\?|$)/i', $url))
+			$alias = $this->url;
+		
 		return parent::setParam(
 			$page,
 			htmlspecialchars($name . ':' . $this->param),

使い方

  1. まず、InterWikiNameのページに以下のような定義を置きます(diagram.phpが、画像生成CGIです)
    [http://localhost/diagram.php/.png? diagram] euc
  2. 使いたいページで、以下のように記述します
    [[diagram:message ここに書いたテキストが渡されます]]
  3. すると以下のようなhtmlが出力されます(:以降が、URLエンコードされて渡されています)
    <a href="http://localhost/diagram.php/.png?message%20%A4%B3%A4%B3%A4%CB%BD%F1%A4%A4%A4%BF%A5%C6%A5%AD%A5%B9%A5%C8%A4%AC%C5%CF%A4%B5%A4%EC%A4%DE%A4%B9"
     title="diagram:message ここに書いたテキストが渡されます" rel="nofollow"><img
     src="http://localhost/diagram.php/.png?message%20%A4%B3%A4%B3%A4%CB%BD%F1%A4%A4%A4%BF%A5%C6%A5%AD%A5%B9%A5%C8%A4%AC%C5%CF%A4%B5%A4%EC%A4%DE%A4%B9" 
    alt="diagram:message ここに書いたテキストが渡されます" /></a>

関連項目

  • BugTrack/108 画像にリンクを貼りたい
  • BugTrack2/247 外部リンクをリダイレクトページ経由にすることで、Refererを消す
    • これとは両立しません。

メッセージ


  • 差分の後半部分、$alias に代入するべきなのは$this->url ではなく$url なのでは?& を含むURL だった場合に、& → &amp; → &amp;amp; へと2重置き換えされてしまうような気が・・・。
    あと、互換性がないような現状の提案では、1.4.x の間は採用見送りになってしまいそう。(AutoLink 有効 → 無効 に変更した時と同じ規模のページデータの書き換えを、アップグレード時に強制してしまう可能性*1 があるため) -- 2009-12-09 (水) 02:37:45
    • ありがとうございます。$urlについては確認します。互換性については、[http://www.something.com/image/$1/0001.jpeg something-image]のような、クエリでない使い方をしている人がいる可能性はあります。InterWikiName側で、埋め込み画像であることを明示した方がスマートかも知れません。 -- pai 2009-12-11 (金) 21:43:40
  • 関連?: BugTrack/460 -- 2009-12-23 (水) 19:30:47

*1 test.png?size=300x400 みたいなパラメータつきのリンクを、InterWiki 使って可変生成している人がいれば、ですけど・・・

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

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

OSDN