URLParamFilter Version 1.2 レジストリ設定

DOCUMENT

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

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


レジストリ設定

レジストリの配置

はじめに

URLParamFilter の基本設定は Windows のレジストリを使用します。

レジストリは Windows 全体が利用する重要な情報ですので、操作を間違ったりしてどこかのエントリを消してしまったりすると場合によっては重大な障害を招く場合もありますので気をつけてください。

 

レジストリの編集には、レジストリエディタを使用します。

「スタート」 メニューから 「ファイル名を指定して実行」 を選択して、次のように入力することで、レジストリエディタを起動することが出来ます。

regedit

 

レジストリエントリの場所

URLParamFilter の設定場所は次のようになります。

HKEY_LOCALMACHINE
+ SOFTWARE
+ EZ-NET
+ URLParamFilter

この HKEY_LOCAL_MACHINE\SOFTWARE\EZ-NET\URLParamFilter という場所が、URLParamFilter の設定を保存する基本の場所となります。

はじめて URLParamFilter を使用する場合は、SOFTWARE 以降のレジストリキーがないので、まずはそれを作成します。

 

URLParamFilter 用のキーを作成する

レジストリエディタの左側のツリービューで HKEY_LOCAL_MACHINE キーの中の SOFTWARE キーを選択します。

右側の広い領域の何もないところで右クリックをして、「新規」 → 「キー」 を選択します。

すると左側のツリービューのところに、新しくキーが作成されて名前を変えられるようになると思います。そうしたら名前として EZ-NET を指定します。

同様に今度は EZ-NET キーを選択して、同様の手順で URLParamFilter という名前のキーを作成します。

 

この場所が、URLParamFilter 全般の設定領域となります。

 

フィルタ設定情報を置くキーを作成する

フィルタ設定情報は、URLParamFilter の基本キーである HKEY_LOCAL_MACHINE\SOFTWARE\EZ-NET\URLParamFilter の中の Database キーに置きます。

 

ですので、まずはこのキーを作成します。

URLParamFilter キーの上で右クリックをして、「新規」 → 「キー」 と選択して、Database という名前のキーを作成します。

基本的にはこの Database キーの中にレジストリエントリを追加して、URLParamFilter の設定を行います。下記に示す 「仮想ホスト用のキー」 で指定された仮想サイト以外は、ここの設定が有効になります。

 

仮想ホスト用のキー

URLParamFilter は仮想ホストにも対応しています。

仮想ホストというのは、IIS の設定で、Web サイトに 「ホストヘッダ名」 をつけることで、たとえ IP アドレスが1つしかなくても、複数の Web サイトを立ち上げられるようにする機能のことです。

 

URLParamFilter は仮想サイトごとに、フィルタ設定情報を置く事が出来ます。

仮想サイトごとの設定をするには、Database キーの中に、設定したい仮想サイトの仮想サイト名をもったキーを用意します。

たとえば、ホストヘッダとして www.station.ez-net.jp が設定されている場合には、"www.station.ez-net.jp" という名前のキーを、Database キーのサブキーとして作成します。

このようにすることで、www.station.ez-net.jp というサイトには、www.station.ez-net.jp というサブキーの中に置かれているレジストリエントリの設定が有効になります。

 

仮想ホストへのアクセスでも、その仮想サイトが Database キーに登録されていない場合は、Database キーに置かれているレジストリエントリの設定が有効になります。

なお、設定可能な仮想ホストの文字数は、1サイトあたり、BufferSize のディフォルト値以内の文字数です。

フィルタ設定用のレジストリエントリ

項目とその役割

レジストリエントリに登録できる項目は、次のようなものがあります。

 

エントリ 初期値 内容 値(例)
BufferSize DWORD = 512 内部で使用する文字列バッファのサイズです。エントリがあっても 64 より小さい値が指定された場合は 64 が適用されます。 200
Type DWORD = 0 フィルタの設定方法を指定します。(現在はファイルのみ) 0 … ファイル
FileName REG_SZ   Type = 0 の場合に使うファイル名をフルパスで指定します。 C:\URLParam.dat
MaxLengthURL DWORD (省略可) URL の最大文字数です。これ以上はカットされます(※1)。このエントリがない場合には、URL のカット処理は行いません。
MaxLengthArguments DWORD  (省略可) 最初に現れる "?" 以降の最大文字数です(※1)。このエントリがない場合には、URL の "?" 以降のカット処理は行いません。 128
CaseSensitive DWORD = 0 URL のホスト部分に関して、大文字小文字を区別するかをしていします(※2)。 0 … 区別しない
1 … 区別する
SafeURL REG_SZ = / URL がカットされたときなど、安全のために呼び出すページです。また、MaxLengthURL が 0 の場合や、内部バッファ以上の URL が指定された場合のリンク先でもあります。SafeMode でリミッタが発動した場合も有効です。 /error.asp
SafeMode DWORD = 0 リミッタが発動したときに、SafeURL へ移動するかどうかの指定です。 0 … 移動しない
1 … 移動する
Logfile REG_SZ ログの出力先をフルパスで指定します。 C:\URLParam.log

※1 … カット処理は、フィルタ条件にかかわらずすべての URL を対象に行われます。先に ? 以降の文字数と MaxLengthArguments と比較して余分な URL をカットした後で、その URL の文字数と MaxLengthURL を比較して、余分な URL をカットします。また、作業には内部バッファを利用するため、事実上 BufferSize 以上のサイズを指定できません。

※2 … ホスト部分 (Host ヘッダ) はブラウザによって自動的に小文字として送られるようなので (IE6 および Opera7 にて確認)、基本的には誤動作を防ぐ意味合いで CaseSensitive = 0 を利用します。

各項目の詳細

Type 【DWORD】 【必須】

フィルタデータの形式を指定します。省略することは出来ません。

現時点では必ず 0 を指定することになります。この 0 番は、フィルタデータとして ”テキストファイル” を使用することを意味します。

FileName 【REG_SZ】 【TYPE=0 で必須】

フィルタデータのファイルが保存されている場所を、絶対パス ( C:\Filter\data.txt など ) で指定します。

BufferSize 【DWORD】 【省略時 = 256】

URLParamFilter が URL の処理を行う際に、内部で使用する内部バッファの大きさを指定します。このエントリは省略することも出来、その場合は、あらかじめ定められた値が使用されます。

この内部バッファは URLParamFilter が機能する上でかならず必要なため、64 未満の値が設定されても、自動的に 64 は確保されるようになっています。

このバッファサイズを超える URL が渡された場合、URLParamFilter は渡された URL を SafeURL に指定されているものに置き換えます。

MaxLengthURL 【DWORD】 【省略時/無効】

URLParamFilter が許容する URL の長さを指定します。

ここで設定された値を超える文字数の URL が URLParamFilter に渡された場合、それを超える分の文字列をカットします。このエントリを省略した場合、URL のカット処理は行われません。

ただし、MaxLengthArguments エントリがある場合には、まずは MaxLengthArguments が担当する部分のカットが行われたうえで、こちらの MaxLengthURL によるカットが行われます。

BufferSize による切り詰めとの違いは、BufferSize の方は文字数を越えてしまった時点で強制的に SafeURL へ置き換えるのに対し、この MaxLengthURL はカットされた状態の URL がそのまま使われます。

MaxLengthArguments 【DWORD】 【省略時/無効】

URLParamFilter が許容する URL に含まれる GET メソッドの引数部分の長さを指定します。

 

ここでいう GET メソッドの引数部分というのは、URL の一番最初に現れた "?" の部分よりも後ろを意味しています。この部分に多量の文字列を与えて攻撃してくるウィルス (ワーム) がいたので、このようなフィルタ機能を用意してみました。

ここで指定された値よりも多い文字数の引数が渡された場合、超えた分の引数文字列はカットされます。このエントリを省略した場合は、引数部分のカット処理は行われません。

MaxLengthURL エントリがあった場合でも、それより先に MaxLengthArguments によるカット処理が行われます。そして引数部分のカットが行われた場合、カットされて短くなった URL に対して、MaxLengthURL によるカット処理が行われます。

SafeMode 【DWORD】 【省略時 = 0】

MaxLengthURLMaxLengthArguments によってリミッタが発動し、URL のカット処理が行われた場合に、SafeURL に設定された URL に置き換えるかを指定します。

この SafeMode に 1 を設定した場合、制限を超える URL が渡されてリミッタが発動すると、その URL は SafeURL で指定したものに置き換えられます。

逆に SafeMode に 0 が設定されている場合は、制限を超えた URL は、制限の範囲内にカットされた状態で処理されます。

SafeURL 【REG_SZ】 【省略時 = "/"】

BufferSize を超える URL が入力された場合や、リミッタ処理の過程で URL の文字数が 0 になってしまった場合、SafeMode に 1 が設定されている状態でリミッタが発動された場合に、置き換える URL を指定します。

これを使用することで、許容外の URL が指定された場合に、エラーページなどへ導くことができます。この URL も通常の要求同様、フィルタ処理にまわされますので気をつけましょう。

このエントリは省略可能で、省略時は、"/" が使用されます。

Logfile 【REG_SZ】 【省略時/無効】

リミッタ処理やフィルタ処理のログを出力するファイルを指定します。ログファイルは絶対パスで指定します。

このエントリは省略することができ、省略した場合にはログは収集されません。

 

レジストリエントリの作成方法

必要なエントリーを、レジストリエディタにて作成します。

標準の設定の場合は、Database キーへ、特定の仮想サイトに対する設定は、その仮想サイト用のキーへ、上記で記した項目を追加します。

各項目の表の中で、TYPE として "REG_SZ" と書かれているものは 「文字列」 のエントリを示します。また "DWORD" と書かれているものは 「DWORD」 のエントリとなります。

 

省略できる項目もあり、その場合は項目によって、無効になったり、URLParamFilter 内部で定められたディフォルト値が適用されます。

詳しくは上記の、各項目の詳細をご覧ください。

 

変更を有効にする

URLParamFilter のレジストリエントリの値を変更した場合は、IIS を再起動しなおす必要があります。

 

Windows 2000 Server の場合は、「インターネットサービスマネージャ」 を管理ツールの中から起動して、自身のコンピュータ名の上で右クリックし、「IIS を再起動する」 を選択することで、再起動することが出来ます。

Windows NT Server の場合は、コントロールパネルから 「サービス」 を実行して、一番下の方にある "World Wide Web Publishing Service" を停止させ、もう一度起動させます。