自サイト内検索用CGIスクリプト
MyWebSearch Ver.1.23
本ソフトウェアは開発を終了しました。基本的に今後のバージョンアップはありません。詳しくは使用許諾書の「開発終了(TNZ指定)ソフトウェアについて」をご覧ください。
概要
小規模Webサイト向けの、自サイト内検索用CGIスクリプトです。Webサイト内のHTML文書やそのほかのテキストファイルから、特定の単語や文字列を含むものを探し出して一覧表示します。毎回すべてのファイルを読み込んで検索するいわゆるgrep型であり、インデックス構築の必要はありません。そのかわり(grep型の常として)動作は比較的低速で、サーバーへの負荷もそこそこかかります。検索対象文書の総数が100個から200個程度のWebサイトでの利用を想定しています。
特徴
- 検索方法はAND、OR、完全一致、正規表現をサポート。使用する方法は設置者が任意に選択可能
- 検索対象のトップディレクトリと対象拡張子を指定し、サブディレクトリまで再帰的に検索する方式のため、コンテンツ(ディレクトリ)が増えても再設定の必要なし
- 簡易的な検索対象のカテゴリ指定が可能(Ver.1.10より)
- 検索対象ディレクトリ内でも、特定のディレクトリ(cgi-binなど)以下や特定のファイルを検索対象から外すことが可能
- 検索対象文書の文字コードはJIS、Shift-JIS、EUCを自動判別。サイト内の混在も可能
- 検索結果ページの文字コードはJIS、Shift-JIS、EUCから任意に選択可能
- テンプレート方式により、スクリプト本体に手を触れずに検索結果ページのデザインをほぼ完全にカスタマイズ可能
- ヒットした単語の数による検索結果の並び替え、ヒット数の表示
- ヒット数が一定数以上を超えると、警告メッセージを表示して以降の検索を抑止することが可能
- 検索日時、入力されたキーワード、ヒット数などのログを記録可能(オプション)
動作環境
Perl 5.005以降をCGIで利用可能なWebサーバー
- Perlの標準モジュールを多用しているため、@niftyのような標準モジュールが用意されていないサーバーで動作させるには、モジュール、ライブラリの手動での設置とスクリプトの改造が必要です。手順はドキュメント内で解説しています。
- nkfが使えるサーバーでは、これを利用することで処理速度を上げることができます。
- ログの記録を行なう場合は上記に加えて、flock関数をサポートする環境が強く推奨されます。flock関数が利用できない場合は、ログファイルに対する排他制御がかからず、ログが破壊されないことを保証できません。
参考文書
本スクリプトは、設定ファイル、本体ともに漢字コードがEUCとなっているため、これに対応していないエディタでは編集できません。お使いのエディタがEUCに対応していない(あるいは自動判別できない)場合は、「Perlスクリプトの編集に適したテキストエディタの紹介」という文書を作成しましたのでご参照ください。
バージョンアップ時の注意点
新しいバージョンに入れ換える際、設定項目が増えている場合があります。その場合、添付の設定ファイル(config.pl)内で、どのバージョンでどの項目が加わったかが分かるようになっているので、必要なもの(自分の使っているバージョン以降に追加されたもの)を既存の設定ファイルにコピーしてください。
ダウンロード
lha形式とtar.gz形式のアーカイブを用意しています。内容は同一ですので、お使いの環境で扱いやすい方をダウンロードしてください。
mws123.zip(47.2KB)
mwsearch-1.23.tar.gz(43.1KB)
ドキュメント
配布ファイル内に入っているものと同一です。
mwsearch.readme.html
更新履歴
Ver.1.23 2011/12/08(Thu)
- [BugFix]入力内容の『<』と『>』を除去し、クロスサイトスクリプティングの脆弱性を解消
約10年ぶりのバージョンアップです。今回JPCERT/CCより脆弱性の指摘を頂き、修正を行いました。名も知らぬ報告者様と、仲介いただいたJPCERT/CCに感謝を。
脆弱性の内容は、入力されたキーワードのエスケープが適切ではないため、CGIの呼び出し時にパラメーター 「keywords」に対してHTMLを含む文字列を指定することにより、その内容がそのまま表示されるというものです。これにより、ブラウザー上で任意のスクリプトが実行される恐れがあります。
攻撃手段としては、スクリプトなどを仕込んだkeywordsパラメーターを含むCGI呼び出し用URLを生成し、別のWebページ上からのリンクなどで誘導する、といったものが考えられます。このように、攻撃者は攻撃対象者を何らかの手段で特定のURLにアクセスさせる必要があるため、本脆弱性の影響は、単にスクリプト等を仕込んだWebページへアクセスを誘導するのと同程度に限定的であると作者は考えています。
なおこの脆弱性により、本スクリプトを設置したサーバー上の情報が漏洩することはありません。
Ver.1.22 2003/03/23(Sun)
- 開発終了につきドキュメント改訂(バージョン番号に変更なし)
Ver.1.22 2002/01/28(Mon)
- [BugFix]<BR>タグを改行に変換する処理で、小文字タグの処理が抜けていたので修正
- <P>タグも<BR>タグと同様に扱うようにした
- [BugFix]サーバーによっては検索対象外ファイルの指定が効いていなかったのを修正
Ver.1.21 2001/06/06(Wed)
- [BugFix]前バージョンの機能追加に伴い、設定によってはまったく検索ができなくなっていた
Ver.1.20 2001/05/30(Wed)
- エラー(検索中止)の対象に「キーワードが空の場合」を追加
- 検索対象外とするファイルの指定をできるようにした
Ver.1.10 2001/04/18(Wed)
Ver.1.01 2001/03/05(Mon)
- [BugFix]AND、OR検索の単語区切りに、半角、全角スペースのどちらも使えるようにしたつもりが、実際には全角に対応していなかった
Ver.1.00 2001/03/01(Thu)
Copyright©1998-2005 Yujiro Nakamura All rights reserved.
本サイトに関するご連絡の方法はreadmeをご参照ください。
本Webページの無断引用、本Webページへの無断リンクを歓迎します(笑)。