target設定をBBcodeで使い分ける

2008/12/10 23:01:52作成
2023/2/12 6:55:07更新
Xoops cube legacyは標準で内部リンクになっていますが、内部リンクだとリンク先のページで次々と遷移してしまうと自分のページがどこへ行ったか分からなってしまいます。こういう場合、bbコードurlを使うことによって外部リンクにすると大変便利です。

リンク方法について調べてみると下記のような記事がありました。
引用:
「target=”_blank”」には「rel=”noopener”」を!htmlで外部リンクを貼る際の注意点。EasyMailブログ
最終更新日:2022年09月05日
https://www.mubag.com/blog/target-blank-noopener/
「target=”_blank”」の危険性
“target=”_blank” にはセキュリティ上の脆弱性があります。
リンク先のページでは window.opener を使用して親ウィンドウのオブジェクトにアクセスしたり、 window.opener.location = newURL によって親ページの URL を変更したりできます。
<a>タグで外部にリンクをする場合、外部のリンクが完全に信用できる自社サイトだったりする場合はその必要はないのですが、 単なる勝手リンクである場合は「rel=”noopener”」をつけるべきということなのです。
つまりリンク先でJavascriptを使えばリンク元を操作できるようになるというものです。Googleの技術者が「他のサイトへのリンクのtarget = “_ blank”は、サイトをパフォーマンスとセキュリティの問題にさらす可能性があります。修正するには、これらのリンクにrel = “noopener”またはrel = “noreferrer”を追加してください」という内容を以下のようにツイートしている。

という記事がありました。また、relについては
引用:
HTML外部リンクのrelについて- Qiita
更新日 2020年10月25日
https://qiita.com/chenglin/items/7c1746d55b9e491275c4
noopener
リンクを新しい閲覧コンテキストで開き、リンク元の文書へアクセスできないようにすることをブラウザーに指示します。
これは信頼できないリンクを開く際、 Window.opener プロパティでリンク元の文書を変更できないように制御できます。外部リンクの場合は基本設定したほうがよいです。

安全性を取るか利便性を取るかということになりますが、やはり別ページに遷移したいということで、bbコードでsiteurlを使う場合は現状のまま内部リンク、urlを使う場合は外部リンクと使い分けるようにしたいと思います。

さて、設定方法ですが、
html/modules/legacy/kernel/Legacy_TextFilter.class.php
440行目
rel="external"
↓変更
target="_blank" rel="noreferrer"とセットで変更

----- Legacy_TextFilter.class.php -----
public static function sMakeXCodeConvertTable(&$patterns, &$replacements)
{
$patterns = "/\[siteurl\=(['\"]?)([^\"'<>]*)\\1\](.*)\[\/siteurl\]/sU";
$replacements[0] = $replacements[1] = '<a href="'.XOOPS_URL.'/\\2" rel="external">\\3</a>';
$patterns = "/\[url\=(['\"]?)(http[s]?:\/\/[^\"'<>]*)\\1\](.*)\[\/url\]/sU";
$replacements[0] = $replacements[1] = '<a href="\\2" target="_blank" rel="noopener">\\3</a>'←この部分です。
$patterns = "/\[url\=(['\"]?)(ftp?:\/\/[^\"'<>]*)\\1\](.*)\[\/url\]/sU";
$replacements[0] = $replacements[1] = '<a href="\\2" rel="external">\\3</a>';
$patterns = "/\[url\=(['\"]?)([^\"'<>]*)\\1\](.*)\[\/url\]/sU";
$replacements[0] = $replacements[1] = '<a href="https://\\2" rel="external">\\3</a>';
$patterns = "/\[color\=(['\"]?)([a-zA-Z0-9]*)\\1\](.*)\[\/color\]/sU";
$replacements[0] = $replacements[1] = '<span style="color: #\\2;">\\3</span>';
$patterns = "/\[size\=(['\"]?)([a-z-]*)\\1\](.*)\[\/size\]/sU";
$replacements[0] = $replacements[1] = '<span style="font-size: \\2;">\\3</span>';
$patterns = "/\[font\=(['\"]?)([^;<>\*\(\)\"']*)\\1\](.*)\[\/font\]/sU";
$replacements[0] = $replacements[1] = '<span style="font-family: \\2;">\\3</span>';
$patterns = "/\[email\]([^;<>\*\(\)\"']*)\[\/email\]/sU";
$replacements[0] = $replacements[1] = '<a href="mailto:\\1">\\1</a>';
$patterns = "/\[b\](.*)\[\/b\]/sU";
---------


以下テストとしてBBcodeを利用しリンクしてみました。
ソロツーリングと旅の地図(bbコード=url)
ソロツーリングと旅の地図( bbコード=siteurl)

※Xoops cube legacy自体のバージョンアップする時にファイルを上書きしてしまうと、この設定が元に戻ってしまうので注意が必要です。
投票数:50 平均点:4.60

趣味を楽しもう新着記事

欲しい商品が必ず見つかるメジャーなネットショップ

ログイン

Facebook,RSSリンク表示

検索

アクセスカウンタ

今日 : 335
昨日 : 249
総計 : 1616121