<filter> <filter-name>sServletFilterScript</filter-name> <filter-class>sServletFilterScript</filter-class> <init-param> <param-name>ScriptEngine</param-name> <param-value>js</param-value> </init-param> <init-param> <param-name>ScriptFilePath</param-name> <param-value>/tmp/sServletFilterScript.js</param-value> </init-param> <init-param> <param-name>MIMECharset</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>IsDebug</param-name> <param-value>TRUE</param-value> </init-param> <init-param> <!-- from http://www.cybersyndrome.net/env.cgi --> <param-name>LogHeaderName</param-name> <param-value>X_LOCKING,X_FORWARDED_FOR,SP_HOST,FORWARDED,CLIENT_IP</param-value> </init-param> </filter> <filter-mapping> <filter-name>sServletFilterScript</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
var returl = "http://www.example.com/"; var checked = false; var IsMime = false; var regex = "(^|\\W)[cC]lass\\W"; // MIME かどうか・・・ if(jObj.isMime() == true){ IsMime = true; // MIME の時点でアウトもあり // checked = true; // jObj.SetRetUrl(returl); var str = jObj.getHeader("content-type"); jObj.LogWrite("Content-Type=" + str); // 4096以上だとアウト if(4096 > str.length){ checked = true; jObj.SetRetUrl(returl); } } if(checked == false){ if(jObj.CheckRegex(regex,true,true,IsMime) == true){ jObj.SetRetUrl(returl); jObj.LogWrite("Bingo"); }else{ jObj.LogWrite("No Hit"); } } |
プロパティ名 | 意味 | 既定値 |
---|---|---|
ScriptEngine | スクリプトエンジンを指定する | js |
ScriptFilePath | スクリプトの保存しているファイル/ディレクトリを指定する | - |
ScriptExcludedExtentions | スクリプトとして実行しないファイルの拡張子(ファイル名の後半部分)をCSV形式で指定(ScriptFilePath がディレクトリ指定の場合のみ) | - |
MIMECharset | MIME 対象の場合の文字コードを指定する | UTF-8 |
IsDebug | ログ出力のレベル(デバグモードかどうか) | true |
LogHeaderName | ログ出力時のヘッダ名の指定(カンマ区切りで複数指定可能) | - |
LogFilePath | ログファイルの指定。この後ろに《日付》+《.log》がつく。指定がない場合は catalina.out | - |
TempDirectory | ServletInputStream のバックアップ先の一時ファイルのディレクトリ。指定がない場合はメモリ上に保持 | - |
IsServerSig | HTTP Response Header にサインを出力するかどうか | false |
プロパティ/メソッド名 | 意味 |
---|---|
ver1.2で廃止 |
|
(HttpServletRequest)getHttpServletRequest() | ServletFilter内部で使われている HttpServletRequest クラスそのもの ver1.2 |
(String)returl | ヒット時にリダイレクトさせる先の Web ページの URL |
(void)LogWrite(String) | LogWrite(msg,true) |
(void)LogWrite(msg,Boolean) | catalina.out へログ出力する。第二引数が true の場合はデバグモードなくても出力する |
(void)SetMIMEboundary(String) | 第一引数から、MIME デリミタ文字列を抽出してクラス内部に格納 |
(boolean)isMime() | HTTPリクエストが MIME 形式かどうか |
(String)getHeader(String) | HTTPリクエストから特定のリクエストヘッダを取得する |
(boolean)isAttack(String) | 第一引数に対して、既に登録された正規表現でのチェックを行う |
(boolean)CheckRegex(String,boolean,boolean,boolean) | パラメータ(GET/POST)、クッキー、MIME の名前に対して正規表現チェックを行う 第一引数 : 正規表現 第二引数 : パラメータをチェック対象とするかどうか 第三引数 : クッキーをチェック対象とするかどうか 第四引数 : MIME の場合、MIME ボディをチェック対象とするかどうか MIME データは、複数行拡張ヘッダ対策のため、タブ、改行、スペースなどを削除した一行の状態で比較するため、先頭を示す正規表現「^」や最後尾を示す「$」はない方がよいだろう |
(boolean)CheckRegexName(String,boolean,boolean,boolean) | (boolean)CheckRegex(String,boolean,boolean,boolean) |
(boolean)CheckRegexValue(String,boolean,boolean,boolean) | 値に対して正規表現チェック{CheckRegex()}を実行する |
(boolean)CheckRegexValue(boolean,boolean,boolean) | 既に登録した正規表現を使って、値に対して正規表現チェック{CheckRegex()}を実行する |
(boolean)CheckRegexName(boolean,boolean,boolean) | 既に登録した正規表現を使って、名前に対して正規表現チェック{CheckRegex()}を実行する |
(void)init() | DecodeCount と DecodeCharset を初期化する |
(void)SetDecodeCharset(String) | CheckRegex() 系のチェックにて URL デコードする際の文字コード(既定は「UTF-8」)をセットする |
(void)SetDecodeCount(int) | CheckRegex() 系のチェックにて URL デコード(文字コード=UTF-8)する回数(既定は「0」回)をセットする |
(int)GetDecodeCount() | CheckRegex() 系のチェックにて URL デコード(文字コード=UTF-8)する回数を返す |
(String[])getMIMEBodyHako() | リクエストボディを MIME として分割する |
(String)getMIMEBody() | リクエストから、MIME の場合は、ボディを返す |
(String)csvExcape() | ログを解析しやすいように CSV 形式のエスケープを実施する 「"」「\」「,」「\r」「\n」がある場合、 「\」→「\\」 「"」→「""」 「\r」→「\\r」 「\n」→「\\n」 |
(void)SetPatternObj(java.util.regex.Pattern) | 正規表現オブジェクトをクラス内部へセットする |
(void)SetPattern(String) | 正規表現をクラス内部へセットする |
(String)GetPattern() | クラス内部へセットした正規表現を得る(セットしていなければ null が返る) |
(void)SetPatternUnicodeCase() | クラス内部へセットした正規表現を、大文字/小文字を区別するようにコンパイルする |
(void)SetPatternCaseInsensitive() | クラス内部へセットした正規表現を、UNICODE に準拠した大文字/小文字を区別しないようにコンパイルする |
(void)SetRetUrl(String) | リダイレクト先の URL をセットする |
(void)dobreak = true/false; | 再帰的に次のスクリプトを読まないようにする(既定は false{次のスクリプトを読む}) |