サマリ | IEからのアクセスを遮断 |
---|---|
リビジョン | 1.01 |
対応バージョン | 1.5.3 |
投稿者 | M.Taniguchi |
投稿日 | 2020-04-27 (月) 04:16:41 |
古い Internet Explorer(IE)からのアクセスを遮断するプラグイン。
PukiWiki 1.5.3/PHP 7.4/UTF-8 で動作確認済み。旧バージョンでもおそらく動くと思います。
次のコードをスキンファイル(skin/pukiwiki.skin.php等)の冒頭「<?php」よりも後(8行目あたり)に挿入してください。
if (exist_plugin_convert('ieblock')) do_plugin_convert('ieblock'); // IE block plugin
設定
PLUGIN_IEBLOCK_ALLOW_VERSION値 | IE10以下 | IE11 | Edge | Edge Chromium版 |
0 | 許可 | 許可 | 許可 | 許可 |
1 | 遮断 | 許可 | 許可 | 許可 |
2 | 遮断 | 遮断 | 許可 | 許可 |
3 | 遮断 | 遮断 | 遮断 | 許可 |
4 | 遮断 | 遮断 | 遮断 | 遮断 |
ieblock.inc.php
(下記のコードをコピーして、plugin ディレクトリに ieblock.inc.php というファイル名で保存してください)
<?php /* PukiWiki - Yet another WikiWikiWeb clone. ieblock.inc.php, v1.01 2020 M.Taniguchi License: GPL v3 or (at your option) any later version 古いInternet Explorerからのアクセスを遮断するプラグイン。 【導入方法】 次のコードをスキンファイル(skin/pukiwiki.skin.php等)の冒頭「<?php」よりも後(8行目あたり)に挿入してください。 if (exist_plugin_convert('ieblock')) do_plugin_convert('ieblock'); // IE block plugin 【設定】 定数 PLUGIN_IEBLOCK_ALLOW_VERSION により、禁止するIEのバージョンを指定することができます。 アクセスを弾いた際、「:BrowserNotSupported」という名前のページがあればエラーメッセージとしてその内容を表示します。なければHTTPエラーステータスのみ返します。 【ご注意】 本プラグインをセキュリティー目的で使用しないでください。 ブラウザーが自称するアプリ情報(UserAgent)を信じ、ごく簡単な判定をしているにすぎません。 また、本プラグインを挿入したスキンを介さないアクセスには効果がありません。 */ define('PLUGIN_IEBLOCK_ALLOW_VERSION', 1); // 0:IE10以下も許可(何もしない), 1:IE11以上のみ許可, 2:Edge以上のみ許可, 3:Edge Chromium版以上のみ許可, 4:Edge Chromium版以下すべて遮断 define('PLUGIN_IEBLOCK_ERRORPAGE', ':BrowserNotSupported'); // 遮断した際に表示するページ名。スキンなしで素のHTMLが表示されるので注意。IEをサポートしない旨とモダンブラウザーDLサイトへのリンク程度のシンプルな内容が望ましい function plugin_ieblock_convert() { if (PLUGIN_IEBLOCK_ALLOW_VERSION <= 0) return ''; // 二重起動禁止 static $included = false; if ($included) return ''; $included = true; $ua = strtolower($_SERVER['HTTP_USER_AGENT']); if (strstr($ua, 'edg/')) { if (PLUGIN_IEBLOCK_ALLOW_VERSION <= 3) return ''; } else if (strstr($ua, 'edge/')) { if (PLUGIN_IEBLOCK_ALLOW_VERSION <= 2) return ''; } else if (strstr($ua, 'trident/7.')) { if(PLUGIN_IEBLOCK_ALLOW_VERSION <= 1) return ''; } else if (!strstr($ua, 'trident/') && !strstr($ua, 'msie')) { return ''; } $page = PLUGIN_IEBLOCK_ERRORPAGE; if ($page && is_page($page)) { $vars['page'] = $page; $page = convert_html(get_source($page)); } else { http_response_code(406); $page = '<div style="position:relative;top:45vh;text-align:center;font-weight:bold">Your Browser is not supported.</div>'; } global $page_title; echo <<<EOT <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <meta name="robots" content="noindex,nofollow,noarchive" /> <meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1,viewport-fit=cover" /> <title>Browser not supported - ${page_title}</title> </head> <body> ${page} </body> </html> EOT; die; }
本プラグインをセキュリティー目的で使用しないでください。
ブラウザーが自称するアプリ情報(UserAgent)を信じ、ごく簡単な判定をしているにすぎません。
また、本プラグインを挿入したスキンを介さないアクセスには効果がありません。
最新のHTML5・CSS3・JavaScript仕様を取り入れたスキンやプラグインを導入または開発しており、レガシーブラウザーに対応しかねる状況への対策として本プラグインを作成しました。
半端なものを見せるより、いっそ遮断してモダンブラウザーへのアップデートを促すほうが適切な場合もあるかと思います。
レガシーブラウザーにもいろいろありますが、とりあえずIEを対象とするのが一般的・現実的でしょう。
特にIE10以下は公式サポートが終了しており、表示・機能のみならずセキュリティー面にも不安があります。
フィーチャーフォンやマイナーブラウザーは対象にするときりがなく、ユーザーに自覚もあると考えられるため除外しました。
ホワイトリスト方式は、UserAgentの弊害として問題にもなっており採用できません。
結果としてIEのみをブラックとみなすような形になりましたが、他意はありません。
GPL v3