- 履歴一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- プラグインの変更箇所/ogp.inc.php へ行く。
- 1 (2020-02-05 (水) 20:28:09)
- 2 (2020-02-05 (水) 20:30:16)
- 3 (2020-02-05 (水) 20:30:16)
- 4 (2020-02-15 (土) 03:11:54)
- 5 (2020-02-15 (土) 03:11:54)
- 6 (2020-02-15 (土) 03:11:54)
- 7 (2021-03-28 (日) 14:07:13)
- 8 (2021-03-28 (日) 14:07:13)
- 9 (2021-03-28 (日) 14:07:13)
- 10 (2021-03-28 (日) 14:07:13)
- 11 (2021-03-28 (日) 14:07:13)
- 12 (2021-03-28 (日) 14:07:13)
- 13 (2021-03-28 (日) 14:07:13)
- 14 (2021-03-28 (日) 14:07:13)
- 15 (2021-03-28 (日) 14:07:13)
- 16 (2021-03-28 (日) 14:07:13)
- 17 (2022-05-22 (日) 15:51:36)
- 18 (2022-05-22 (日) 15:51:36)
目次
[表示]
変更箇所のまとめ
- XSS対策
- ベースネーム表示機能の追加。
- 画像非表示機能の追加。
- ページ名からリンクを作成する機能を追加。 (内部リンクのみ)
- 画像の拡張子を判別して表示する機能追加。
変更の詳細
XSS対策を施す
そのまま使うとXSSの危険性があったためいくつか修正を施す。
URLが不正であった場合にエラーを返すようにする
デフォルトだとURL先のページが存在しなかった場合でもカードの作成に入ってしまうので、そこを修正する。
$graph = OpenGraph::fetch($ogpurl[0]);
if ($graph) {
...
- }
+ } else return '#ogp Error: Page not found.';
カード作成前にサニタイズする
例えばリンク先がWikiだった場合、存在しないページでも編集画面に繋がってしまう。
そのため上記修正のみだと不十分なため、return前の適当な場所で引数をサニタイズしておく。
$imgtag = 'img class="ogp-img"' ;
}
+ $ogpurl[0] = htmlsc($ogpurl[0]);
return <<<EOD
修正箇所を2つ挙げたものの、XSS対策としては2つ目 (サニタイズ) のみでも大丈夫。多分。
ベースネーム表示と画像非表示オプションを追加
- ベースネーム表示機能
- Wikiだとページ名が "AAA/BBB/CCC" のように階層化されている場合がある。
この "CCC" に当たる部分がベースネーム。
階層が深くなりすぎると、ページ名が長すぎて行数制限内に収まりきらないことがあるため、オプションでベースネームのみを表示するように指定できるようにする。
- 画像非表示機能
- デフォルトだとリンク先のOGPタグに画像が指定されていないと表示が崩れるため、画像そのものを非表示にする機能を追加する。
最後の方にあるampオプションの処理部分を改変する。
-if($ogpurl[1] == "amp"){
- $imgtag = 'amp-img class="ogp-img" layout="fill"' ;
-} else {
- $imgtag = 'img class="ogp-img"' ;
-}
+foreach ($ogpurl as $param) {
+ switch ($param) {
+ case 'amp': // amp
+ $imgtag = 'amp-img class="ogp-img" layout="fill"' ;
+ break;
+ case 'noimg': // 画像なし
+ $imgtag = 'img class="ogp-noimg"';
+ break;
+ case 'base': // ページのbasenameのみを表示 (Wiki系のサイト用)
+ $title = array_pop(explode('/',$title));
+ default:
+ break;
+ }
+}
+if (!isset($imgtag)) $imgtag = 'img class="ogp-img"';
CSSに以下を追加。
img.ogp-noimg { display: none; }
画像の拡張子を判別する
そのままだと画像を全て.imgで保存・表示していたため、拡張子を判別する機能を追加する。
まず$imgcacheを別の場所で使うため省略。
$datcache = CACHE_DIR . 'ogp/' . $ogpurlmd . '.dat';
-$imgcache = CACHE_DIR . 'ogp/' . $ogpurlmd . '.img';
キャッシュがある場合の処理を改変。
datから画像パスを持ってくる。
-if(file_exists($datcache) && file_exists($imgcache)) {
+if (file_exists($datcache)) {
$ogpcache = file_get_contents($datcache);
$ogpcachearray = explode("<>", $ogpcache);
$title = $ogpcachearray[0];
$description = $ogpcachearray[1];
- $src = $imgcache ;
+ $src = $ogpcachearray[2];
} else {
キャッシュがない場合の処理を改変。
拡張子の判別と画像の保存、datへの書き込みを行う。
$imgfile = file_get_contents($src);
- $imginfo = pathinfo($src);
- /* $imgname = $imginfo['basename']; */
- file_put_contents($datcache, $title . '<>' . $description . '<>' . $ogpurl[0]);
- file_put_contents($imgcache, $imgfile);
+ if (empty($imgfile)) {
+ // file_get_contentsに失敗したら専用画像表示
+ // $imgcache = $src; ← 直リンver (オススメはしない)
+ $imgcache = IMAGE_DIR . 'noimg.jpg';
+ } else {
+ // 成功したら画像を保存
+ $extension = array_pop(explode('.', $src)); // 拡張子を取得
+ if (preg_match('/(.+)(\?|\&).+/', $extension, $match)) {
+ $extension = $match[1];
+ }
+ $imgcache = CACHE_DIR . 'ogp/' . $ogpurlmd . '.' . $extension;
+ file_put_contents($imgcache, $imgfile);
+ }
+ file_put_contents($datcache, $title . '<>' . $description . '<>' . $imgcache);
pukiwikiカスタマイズ箇所/ogp.inc.php - 腫瘍学レ点ノート
質問や指摘などあればどうぞ。
コメントはありません。 コメント/プラグインの変更箇所/ogp.inc.php