#author("2020-02-12T18:02:11+09:00;2020-02-05T20:30:16+09:00","default:kanateko0404","kanateko0404")
RIGHT:&tag(カスタマイズ,プラグイン改造);
#contentsx
*変更箇所のまとめ [#b2cbdde4]
-XSS対策
-ベースネーム表示機能の追加。
-画像非表示機能の追加。
-ページ名からリンクを作成する機能を追加。 (内部リンクのみ)
//-画像保存機能の廃止。
*変更の詳細 [#sf783ded]
**XSS対策を施す [#xss]
そのまま使うとXSSの危険性があったためいくつか修正を施す。
***URLが不正であった場合にエラーを返すようにする [#df9631c3]
デフォルトだとURL先のページが存在しなかった場合でもカードの作成に入ってしまうので、そこを修正する。
#prism(diff-php diff-highlight){{
$graph = OpenGraph::fetch($ogpurl[0]);
if ($graph) {
...
- }
+ } else return '#ogp Error: Page not found.';
}}
***カード作成前にサニタイズする [#c290a14b]
例えばリンク先がWikiだった場合、存在しないページでも編集画面に繋がってしまう。
そのため上記修正のみだと不十分なため、return前の適当な場所で引数をサニタイズしておく。
#prism(diff-php diff-highlight){{
$imgtag = 'img class="ogp-img"' ;
}
+ $ogpurl[0] = htmlspecialchars($ogpurl[0]);
return <<<EOD
}}
修正箇所を2つ挙げたものの、XSS対策としては2つ目 (サニタイズ) のみでも大丈夫。多分。
**ベースネーム表示と画像非表示オプションを追加 [#h7cc6ff8]
:ベースネーム表示機能|
Wikiだとページ名が "AAA/BBB/CCC" のように階層化されている場合がある。
この "CCC" に当たる部分がベースネーム。
階層が深くなりすぎると、ページ名が長すぎて行数制限内に収まりきらないことがあるため、オプションでベースネームのみを表示するように指定できるようにする。
:画像非表示機能|
デフォルトだとリンク先のOGPタグに画像が指定されていないと表示が崩れるため、画像そのものを非表示にする機能を追加する。
最後の方にあるampオプションの処理部分を改変する。
#prism(diff-php diff-highlight){{
-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));
+ }
+}
+if (!isset($imgtag)) $imgtag = 'img class="ogp-img"';
}}
CSSに以下を追加。
#prism(css){{
img.ogp-noimg { display: none; }
}}
#null{{{
**画像を保存しないようにする [#s3af354b]
当方の環境だとcacheフォルダ内に保存した.imgファイルが正常に表示できなかったため、リンク先のサイトの画像URLをそのまま使うことにした。
まずは.imgを作成する部分を削除。
#prism(diff-php diff-highlight){{
$datcache = CACHE_DIR . 'ogp/' . $ogpurlmd . '.dat';
-$imgcache = CACHE_DIR . 'ogp/' . $ogpurlmd . '.img';
}}
キャッシュがある場合の処理を改変。
#prism(diff-php diff-highlight){{
$description = $ogpcachearray[1];
- $src = $imgcache ;
+ $src = $ogpcachearray[2];
} else {
}}
キャッシュがない場合の処理を改変
#prism(diff-php diff-highlight){{
- $imgfile = file_get_contents($src);
- $imginfo = pathinfo($src);
- /* $imgname = $imginfo['basename']; */
- file_put_contents($datcache, $title . '<>' . $description . '<>' . $ogpurl[0]);
+ file_put_contents($datcache, $title . '<>' . $description . '<>' . $src);
- file_put_contents($imgcache, $imgfile);
}}
これで画像を保存しなくても表示できるようになる。
ページの表示速度も保存した場合と特に変わらず。
}}}
----
[[pukiwikiカスタマイズ箇所/ogp.inc.php - 腫瘍学レ点ノート:https://oncologynote.com/?c7fc224f04]]
質問や指摘などあればどうぞ。
#pcomment(,10,above,reply)