URLParamFilter Version 1.2

INTRODUCTION

IIS で GET メソッドの引数ではなく URL 自体に値を持たせることを可能にするための ISAPI フィルタです。

URL の文字数制限も可能です。


ソフトウェア情報

情報

URLParamFilter

Microsoft 社 の Web サーバである IIS で、URL を引数として使用するための ISAPI フィルタです。

特定の条件の URL を見つけると、あらかじめ定められた URL へ置き換えます。その際、指定された URL はある法則で分離されて、環境変数に保存されます。これを使用すると、URL の一部を引数のように利用して、ひとつの ASP で処理したり出来るようになります。

 

また、文字数制限の機能も持っているので、異常に長い URL をブロックすることができます。URL 全体の長さのほか、最初に現れた "?" 以降、いわゆる GET メソッドの引数部分の制限も出来ます。

 

URLParamFilter はフリーソフトです。

著作権こそ放棄してませんけど、 ソフトウェア利用規定 の範囲でご自由に使ってくださって OK です。ただ、このソフトの利用によって何らかのトラブルが発生しても自分の責任で対処してください。

 

分類

このソフトウェアの分類は 【フリーソフト】 です。

著作権こそ放棄してませんけど、 ソフトウェア利用規定 の範囲でご自由に使ってくださって OK です。ただ、このソフトの利用によって何らかのトラブルが発生しても自分の責任で対処してください。

 

注意事項

単純に手を抜いただけともいうのですが、URLParamFilter 用のコントロールパネルを作成する余裕がなかったため、設定にはレジストリエディタが必要です。

レジストリエディタ自体は Windows に標準で搭載されているのですが、操作を誤ると Windows に致命的なダメージを負わせることも可能なツールのため、取り扱いには十分注意してください。

レジストリを操作するのが心配な方は URLParamFilter を使用しないことをお勧めします。万一、なにかトラブルを起こしましても、こちらでは責任を負えませんので。

URLParamFilter を使おうと思うくらいの方ならば、レジストリエディタくらい使える技量を持っておられるとは思いますけど ^^;

 

特徴

長所
  • GET メソッドの引数ではなく URL に直接、値を埋め込むことができます。GET メソッドの引数との共存も可能です。
  • 相対パスを利用することで応用範囲が広がります。
  • URL を使用しますので、ブラウザの環境にあまり左右されません。
  • URL 全体、GET の引数部分ごとの文字数制限が出来ます。
  • 仮想ドメインに対応しています。
短所
  • ISAPI フィルタを設定する権限がないとインストールできません。
  • URL を使用しますので、パスワードなどの秘密の値をやり取りするのには向きません。
  • 設定に、手動によるレジストリ操作が必要です。

 

互換性

Version 1.1 -> Version 1.2
  • ディフォルトで URL のホスト部分に関して、大文字小文字を区別しなくなりました。従来どおりに振舞わせるには、レジストリエントリに [DWORD] CaseSensitive = 1 を指定する必要があります。

発見されている不具合

  • 今のところ特になし。

 

動作環境

動作環境

  • Windows NT Server 4.0 + IIS 4.0
  • Windows 2000 Server + IIS 5.0

他の環境でも動くかと思いますけど、これらでしか試していません。

 

メモリ

…。

 

開発環境

Microsoft Visual C++ 6.0

 

ダウンロード

  • IIS4, IIS5 - 作成中です

 

関連リンク

 

おまけ

設定ファイル

サンプルということで、実際に自分のサイトで使用しているフィルタデータの設定ファイルを参照できるようにしてみました。

 

ログファイル

第3者の機密情報は含まれないはずですので、これもサンプルということで、実際に自分のサイトで収集されているフィルタログを参照できるようにしてみました。

 

製作日記

2003/09/27

昨日の更新分のデバッグを行いました。そのところ、レジストリの設定を行っても URLPARAM = -1 が返ってしまっていました。… とおもったら、レジストリ設定のミスでした^^;;; Type の省略および CaseSensitive のデバッグを終了しました。ただ、ブラウザは基本的に Host ヘッダを小文字で通知するようなので基本的に CaseSensitive = 1 は特殊設定的な利用用途の予感です。

内部バッファサイズを 512 に拡張しました。また、バッファサイズ指定を省略した場合の適用サイズは 512 に拡大されています。

2003/09/26

CImplement.EndOfProc および関連箇所を修正して、レジストリ設定がなされていないときに IIS が例外エラーで落ちないようにしてみました。レジストリ設定が存在しない場合は、文字列バッファとして固定値が利用されることとなりますけど、その際はあらかじめ定められた文字列の操作のみしかおこなわないので、バッファーがあふれるようなことにはならないはず…。

そして・・・、なぜだかわからないのですけど、いままでは IIS 5 を再起動すればビルド(上書き)可能となっていたのが、そのころからかいったん IIS を停止させないとリリースされなくなりました。むむ、これはどうしたことでしょう。たまたま MB とかハードウェア面を交換して Windows XP を入れなおしたりしてたところなのでそのせい…? とかいいがかりをつけつつ、なにかスタンバイの段階でよからぬコードでも追加してしまったのではないかと心配中なのです。

というか、むしろバグっぽかった派生クラスのデストラクタから delete [] m_config という行を取り除いてみたのですけどね。基底クラスのメンバーでそのデストラクタにてちゃんと削除処理がなされていたため明らかにバグの元…のはずなのです。念のため、基底クラスのデストラクタがちゃんと呼ばれているか MessageBeep(MB_ICONASTERISK); というコードを追加して実験してみたところ、IIS 5 の再起動時にしっかりと Beep 音が鳴ったので、とりあえずデストラクタ自体は呼ばれているようでした。

そんななか、コンストラクタ系からよばれる Initialize() および Finalize() が無駄に Virtual 指定だったので念のため解消しておきました。

 

URL (ホスト部分) の大文字小文字を区別しないようにするために、CConfiguration に CaseSensitive メンバー変数を追加しました。また、死に設定だった Type の値を、未設定でも Text File モードになるように調整しました。上記変更に伴って、URLPARAM_CASE_SENSITIVE 環境変数を追加しました。

なお、この修正はまだ実装だけで、デバッグは行っていません。