安全なコミュニティサイトのための module.textsanitizer.php カスタマイズ
悪意のあるユーザーから、他のユーザーを守るために以下のHackをmodule.textsanitizer.phpにかけています。
主に、アカウントハック対策として、外部URLへのリンク(イメージも含め)を禁止。また、主に管理用として自分が許可するURLとブログモジュールなどサイト内に[img][url]タグで{XOOPS_URL}リンクを貼り付ける機能は許可するHackです。
■makeClickable機能の拒否
http://などから始まる文字列を自動でリンクをつけてくれる機能
function &makeClickable(&$text) { // $patterns = array("/(^|[^]_a-z0-9-=\"'\/])([a-z]+?):\/\/([^, \r\n\"\(\)'<>]+)/i", "/(^|[^]_a-z0-9-=\"'\/])www\.([a-z0-9\-]+)\.([^, \r\n\"\(\)'<>]+)/i", "/(^|[^]_a-z0-9-=\"'\/])ftp\.([a-z0-9\-]+)\.([^, \r\n\"\(\)'<>]+)/i", "/(^|[^]_a-z0-9-=\"'\/:\.])([a-z0-9\-_\.]+?)@([^, \r\n\"\(\)'<>\[\]]+)/i"); // $replacements = array("\\1<a href=\"\\2://\\3\" target=\"_blank\">\\2://\\3</a>", "\\1<a href=\"http://www.\\2.\\3\" target=\"_blank\">www.\\2.\\3</a>", "\\1<a href=\"ftp://ftp.\\2.\\3\" target=\"_blank\">ftp.\\2.\\3</a>", "\\1<a href=\"\\2@\\3\">\\2@\\3</a>"); // $ret = preg_replace($patterns, $replacements, $text); // return $ret; return $text; }
■[url]タグによる外部リンクの拒否
[url]でXOOPS_URL、または自分で許可するサイト以外へのリンクを無効化し、単なるテキスト表示にします。
// $patterns = "/\[url=(['\"]?)(http[s]?:\/\/[^\"'<>]*)\\1](.*)\[\/url\]/sU"; // $replacements = '<a href="\\2" target="_blank">\\3</a>'; // $patterns = "/\[url=(['\"]?)(ftp?:\/\/[^\"'<>]*)\\1](.*)\[\/url\]/sU"; // $replacements = '<a href="\\2" target="_blank">\\3</a>'; // $patterns = "/\[url=(['\"]?)([^\"'<>]*)\\1](.*)\[\/url\]/sU"; // $replacements = '<a href="http://\\2" target="_blank">\\3</a>'; $patterns = "/\[url=(['\"]?)(http[s]?:\/\/www.xoops.org\/[^\"'<>]*)\\1](.*)\[\/url\]/sU"; // www.xoops.orgへのリンクを許可 $replacements = '<a href="\\2" target="_blank">\\3</a>'; $patterns = "/\[url=(['\"]?)(".preg_quote(XOOPS_URL,"/")."[^\"'<>]*)\\1](.*)\[\/url\]/sU"; // XOOPS_URL内リンクを許可 $replacements = '<a href="\\2" target="_blank">\\3</a>';
■[img]タグでの外部サイトからの読み込みを禁止する
[img]http://(罠サイトURL)[/img]とされた場合、最悪この記述があるページを開いた途端にActiveXが動作し、ウイルスに感染する危険があります。
// $patterns = "/\[img align=(['\"]?)(left|center|right)\\1]([^\"\(\)\?\&'<>]*)\[\/img\]/sU"; //元の記述をコメントアウト。 // $patterns = "/\[img]([^\"\(\)\?\&'<>]*)\[\/img\]/sU"; //元の記述をコメントアウト。 $patterns = "/\[img align=(['\"]?)(left|center|right)\\1](".preg_quote(XOOPS_URL,"/")."[^\"\(\)\?\&'<>]*)\[\/img\]/sU"; //XOOPS_URLは許可 $patterns = "/\[img](".preg_quote(XOOPS_URL,"/")."[^\"\(\)\?\&'<>]*)\[\/img\]/sU"; $patterns = "/\[img align=(['\"]?)(left|center|right)\\1](http[s]?:\/\/www.xoops.org\/[^\"\(\)\?\&'<>]*)\[\/img\]/sU"; //www.xoops.orgは許可 $patterns = "/\[img](http[s]?:\/\/www.xoops.org\/[^\"\(\)\?\&'<>]*)\[\/img\]/sU"; $patterns = "/\[img align=(['\"]?)(left|center|right)\\1 id=(['\"]?)([0-9]*)\\3]([^\"\(\)\?\&'<>]*)\[\/img\]/sU"; $patterns = "/\[img id=(['\"]?)([0-9]*)\\1]([^\"\(\)\?\&'<>]*)\[\/img\]/sU"; if ($allowimage != 1) { $replacements = '<a href="\\3" target="_blank">\\3</a>'; $replacements = '<a href="\\1" target="_blank">\\1</a>'; $replacements = '<a href="\\3" target="_blank">\\3</a>'; $replacements = '<a href="\\1" target="_blank">\\1</a>'; $replacements = '<a href="'.XOOPS_URL.'/image.php?id=\\4" target="_blank">\\5</a>'; $replacements = '<a href="'.XOOPS_URL.'/image.php?id=\\2" target="_blank">\\3</a>'; } else { $replacements = '<img src="\\3" align="\\2" alt="" />'; $replacements = '<img src="\\1" alt="" />'; $replacements = '<img src="\\3" align="\\2" alt="" />'; $replacements = '<img src="\\1" alt="" />'; $replacements = '<img src="'.XOOPS_URL.'/image.php?id=\\4" align="\\2" alt="\\5" />'; $replacements = '<img src="'.XOOPS_URL.'/image.php?id=\\2" alt="\\3" />';
xoops_urlを識別するコード出典:GIJOE氏
http://www.xugj.org/modules/QandA/index.php?post_id=5097
THANKS avtx30氏 wahyu氏 GIJOE氏