LuaでのHTTPメッセージ処理

このセクションの内容

概要

メッセージ処理のためのスクリプト

スクリプトで使用されるテーブル

利用可能な補助モジュール

概要

Dr.Web ICAPDコンポーネントはLuaプログラムインタプリタを介したインタラクションをサポートします(バージョン5.3.4を使用。Dr.Web for UNIX Internet Gatewaysに同梱)。Luaで記述されたスクリプトは、HTTPプロトコルメッセージの解析と処理のためにコンポーネントで使用できます。

ICAPプロトコルを介してプロキシサーバーからスキャンのために受信したHTTPメッセージ(リクエストまたはレスポンス)の解析は、Dr.Web ICAPDの設定でMessageHookパラメータの値として指定されたLuaスクリプト(Luaコードのスニペットか、必要な処理プログラムを含むファイルへのパスで指定できる)を使用して実行されます。

メッセージ処理のためのスクリプト

スクリプトの必要条件

このスクリプトには、メッセージスキャンモジュールのエントリポイントとなるグローバル関数が含まれている必要があります(Dr.Web ICAPDは、新たに受信したメッセージを処理する際にこの関数を呼び出します)。処理関数は、次の呼び出し規則を満たす必要があります。

1.関数名message_hookです。

2.引数MessageContextテーブルのみです(関数から処理されたメールメッセージに関する情報へのアクセス権限を提供します)。

3.戻り値は文字列です。戻り値は、スキャンされたメッセージの判定、つまり、メッセージをスキップするかブロックするかを決定します。以下の値を使用できます。

"pass"では、メッセージが受信者に渡されます(サーバーへのHTTPリクエスト、クライアントへのHTTPレスポンス)。

"block"は、HTTPメッセージは受信者に送信されず、クライアントはブロックされたWebページを含むHTTPレスポンスを受信します。

関数の実行時に異なる値が返された場合やエラーが発生した場合は、スキャンエラーとして扱われます。この場合のクライアントへのレスポンスは、BlockUnchecked設定パラメータの値によって異なります。

スキャンのために受信したすべてのHTTPメッセージについて、Dr.Web ICAPDにPass判定を常に返す正しい関数定義の例は以下のとおりです(以降、ctx引数はMessageContextテーブルのインスタンスです)。

function message_hook(ctx)
  return "pass"
end

次に示す例のスクリプトは、Active DirectoryのWeb Adminsグループのメンバー以外のすべてのユーザーに対して、Dr.WebドキュメントWebサイト以外のすべてのリソースへのアクセスをブロックします。

local dwl = require "drweb.lookup"

function message_hook(ctx)

  -- Not to block access to resources at the document website
  -- of Doctor Web
  if ctx.req.url.in_list{"download.geo.drweb.com"} then
      return "pass"
  end

  -- To allow access to users from the WebAdmins group
  -- in Active Directory
  if dwl.check("WebAdmins", "AD@WinRoot", ctx.icap.user) then
      return "pass"
  end

  -- Block access for all the others (to all resources)
  return "block"

end

スクリプトで使用されるテーブル

テーブルMessageContext

このテーブルはmessage_hook関数の入力引数として使用され、処理されたHTTPメッセージに関する情報(タイプ、ヘッダー、本文、送信者と受信者に関する情報(ある場合))へのアクセスを提供します。

フィールド

説明

データタイプ

direction

HTTPメッセージタイプ。次の値を取ります。

"request" - HTTPリクエスト

"response" - HTTPレスポンス

文字列

icap

ICAPリクエストヘッダーに関する情報。

テーブルICAP

request

HTTPリクエストヘッダーに関する情報。

テーブルRequest

response

HTTPレスポンスヘッダーに関する情報。

テーブルResponse

body

HTTPメッセージ本文に関する情報。

テーブルBody

無効になったメタメソッドなし

テーブルICAP

このテーブルはMessageContextテーブルのicapフィールドとして使用されます。HTTPプロキシサーバーからのICAPリクエストに関するデータが含まれます。

フィールド

説明

データタイプ

user

ICAPリクエストのX-Client-Usernameヘッダーから取得したユーザーに関する情報。

テーブルUser

src

リクエストを送信したクライアントのIPアドレス(プロキシサーバーによって送信されたICAPリクエストのX-Client-IPヘッダーから取得)またはnil(アドレスが不明な場合)。

テーブルIpAddress

field

ICAPリクエストヘッダーの配列。

HeaderFieldテーブルの配列

search

正規表現を使用してヘッダーを検索する関数。patterns引数(つまり、検索パターン、Perl構文(PCRE)の1つ(文字列)または複数(文字列の配列)の正規表現)を要求し、使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。

次のブール値を返します。

true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。

false - 一致するものがない場合。

機能

value

唯一の引数であるヘッダー名(文字列)を要求する関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合はnilを返します。

機能

無効になったメタメソッドなし

テーブルUser

このテーブルにはユーザーの名前とドメインが含まれます。どちらのフィールドもオプションです。

フィールド

説明

データタイプ

user

ユーザー名

文字列

domain

ユーザードメイン

文字列

無効になったメタメソッド:

__toString - この関数は、Userコンテンツを文字列(UTF-8)として返します。

__concat - この関数は、User文字列値と別の文字列を連結します。

テーブルHeaderField

このテーブルではHTTPまたはICAPメッセージヘッダーを指定します。

フィールド

説明

データタイプ

name

ヘッダー名。

文字列

value

ヘッダー値。

文字列

無効になったメタメソッドなし

テーブルRequest

このテーブルではHTTPリクエストのヘッダーを指定します。

フィールド

説明

データタイプ

method

リクエストで使用されたHTTPプロトコルメソッド("POST"など)。ICAPリクエストにHTTPリクエストヘッダーが含まれていない場合はnil

文字列

url

HTTPリクエストが送信されるリソースのURL。

テーブルUrl

content_type

HTTPリクエストのContent-Typeヘッダーの情報。

ContentTypeテーブル

field

HTTPリクエストヘッダーの配列。

HeaderFieldテーブルの配列

search

正規表現を使用してヘッダーを検索する関数。patterns引数(つまり、検索パターン、Perl構文(PCRE)の1つ(文字列)または複数(文字列の配列)の正規表現)を要求し、使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。

次のブール値を返します。

true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。

false - 一致するものがない場合。

機能

value

唯一の引数であるヘッダー名(文字列)を要求する関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合はnilを返します。

機能

無効になったメタメソッドなし

テーブルContentType

このテーブルでは、Content-Typeヘッダーから取得する値を指定します。

フィールド

説明

データタイプ

type

メッセージ部分のMIMEタイプ

文字列

subtype

メッセージ部分のサブタイプ

文字列

param

次のフィールドを持つテーブル配列形式のヘッダーパラメータ:

nameはパラメータの名前(文字列)です。

valueはパラメータの値(文字列)です。

テーブル配列

match

唯一の引数media_types、つまりMIMEタイプを指定する文字列の配列を要求する関数。リスト内の各文字列は"type/subtype""type/*""*/*"のいずれかの形式でなければなりません。

次のブール値を返します。

true - 本文のMIMEタイプが指定された文字列(大文字と小文字が区別されない)のいずれかに一致するか、配列に文字列"*/*"が含まれている場合。

false - それ以外の場合。

機能

無効になったメタメソッド:

__tostringは、デコードされたヘッダー値を返す関数です。

__concatは、ヘッダーの復号化された値と文字列を連結する関数です。

テーブルUrl

このテーブルではURLを指定します。

フィールド

説明

データタイプ

scheme

スキーム(プロトコル)プレフィックス(例:"http")。プレフィックスがない場合、値はnilになります。

文字列

host

ホスト名またはIPアドレス(例:"example.com")。ホスト名がない場合、値はnilになります。

文字列

port

ポート番号(例:80)。番号がない場合、値はnilになります。

番号

path

リソースへのパス(例:"index.html")。パスがない場合、値はnilになります。

文字列

query

デコードされたリクエストパラメータ。パラメータがない場合、値はnilになります。

文字列

legal_url

URLがowners_noticeカテゴリーに属する場合、フィールドには所有者のWebサイトへのURLが含まれます。属さない場合は、nilになります。

文字列

in_list

唯一の引数hosts、つまりホストリスト(文字列の配列)を要求する関数。次のブール値を返します。

true - hostが指定されたドメインのいずれかのサブドメインであるか、それらのいずれかに一致する場合。

false - hostが指定されたドメインのいずれかのサブドメインでないか、それらのいずれにも一致しない場合

機能

categories

1つのオプション引数filter、つまりUrlCategoryFilterテーブルを受け取る関数(引数がない場合は、空のテーブルを使用するのと同じです)。フィルターで指定されたURL条件を満たすすべてのカテゴリーを反復処理できる、反復子関数を返します。

機能

in_categories

唯一の引数categories、つまりURLカテゴリーリスト(文字列の配列)を要求する関数。次のブール値を返します。

true - URLが指定されたカテゴリーの少なくとも1つに該当する場合。

false - URLが、指定されたカテゴリーの少なくとも1つに該当しない場合。

categories配列が空の場合は、常にfalseを返します。UrlCategoryFilterテーブルのcategoryフィールドの説明にある可能なカテゴリー値を参照してください。

機能

raw

生のデコードされていないURL。

テーブルRawUrl

無効になったメタメソッド:

__toString - この関数は、Urlコンテンツを文字列(UTF-8)として返します。

__concat - この関数は、Url文字列値と別の文字列を連結します。

テーブルRawUrl

このテーブルには、デコードされていないURLデータが含まれます。

フィールド

説明

データタイプ

scheme

スキーム(プロトコル)プレフィックス(例:"http")。プレフィックスがない場合、値はnilになります。

文字列

host

ホスト名またはIPアドレス(例:"example.com")。ホスト名またはIPアドレスがない場合、値はnilになります。

文字列

port

ポート番号(例:80)。ポート番号がない場合、値はnilになります。

番号

path

リソースへのパス(例:"index.html")。パスがない場合、値はnilになります。

文字列

query

デコードされたリクエストパラメータ。パラメータがない場合、値はnilになります。

文字列

無効になったメタメソッド:

__toString - この関数は、RawUrlコンテンツを文字列(UTF-8)として返します。

__concat - この関数は、RawUrl文字列値と別の文字列を連結します。

テーブルUrlCategoryFilter

このテーブルではURLカテゴリーのフィルターを指定します(フィールドはすべてオプションです)。

フィールド

説明

データタイプ

category

URLが該当するカテゴリーのリスト(大文字と小文字は区別されません)。リストには次の値が含まれる場合があります。

"infection_source" - 感染源。

"not_recommended" - 非推奨のWebサイト。

"adult_content" - アダルトコンテンツ。

"violence" - 暴力。

"weapons" - 武器。

"gambling" - ギャンブル。

"drugs" - 薬物。

"obscene_language" - 卑猥な表現。

"chats" - チャット。

"terrorism" - テロリズム。

"free_email" - 無料メール。

"social_networks" - ソーシャルネットワーク。

"owners_notice" - 著作権者からの申し立てによってリストに登録されたWebサイト。

"online_games" - オンラインゲーム。

"anonymizers" - アノニマイザー。

"cryptocurrency_mining_pools" - 仮想通貨マイニングプール。

"jobs" - 求人情報のWebサイト。

"black_list" - ブラックリスト。

文字列または文字列のテーブル

category_not

URLが該当しないカテゴリーのリスト(大文字と小文字は区別されません)。

文字列または文字列のテーブル

無効になったメタメソッドなし

フィルターフィールドが指定されていない(値がnilである)場合、すべての脅威がフィルターと一致します。
複数のフィルターフィールドが指定されている場合、条件は接続詞(論理積)によって結合されます。フィルターフィールドがテーブル(リスト)の場合、オブジェクトは少なくとも1つのテーブル(リスト)の項目と一致する必要があります。

テーブルResponse

このテーブルではHTTPレスポンスヘッダーを指定します。

フィールド

説明

データタイプ

status

HTTPレスポンスコード、またはICAPリクエストにHTTPレスポンスヘッダーが含まれていない場合はnil

番号

reason

レスポンスコードへのコメント。コメントがない場合はnil

文字列

content_type

HTTPレスポンスのContent-Typeヘッダーから取得される情報。

テーブルContentType

field

HTTPレスポンスヘッダーの配列。

HeaderFieldテーブルの配列

search

正規表現を使用してヘッダーを検索する関数。必須のpatterns引数(つまり、検索パターン、Perl構文(PCRE)の1つ(文字列)または複数(文字列の配列)の正規表現)を受け入れ、使用可能なすべてのヘッダーを検索します。引用符で囲まれた文字列を使用する場合は、スラッシュ文字をエスケープする必要があります。

次のブール値を返します。

true - field.name .. ": " .. field.value.decoded文字列が、少なくとも1つのヘッダーに対して指定した少なくとも1つの正規表現と一致する場合。

false - field.name .. ": " .. field.value.decoded文字列がどのヘッダーに対しても、どの正規表現とも一致しない場合。

機能

value

唯一の引数であるヘッダー名(文字列)を要求する関数。指定された名前を持つ最初のヘッダーの値を返します。この名前のヘッダーがない場合はnilを返します。

機能

無効になったメタメソッドなし

テーブルBody

このテーブルではHTTPメッセージ本文を指定します。

フィールド

説明

データタイプ

has_threat

1つのオプション引数filter、つまりThreatFilterテーブルを受け取る関数(引数がない場合は、空のテーブルを使用するのと同じです)。次のブール値を返します。

true - HTTPメッセージ本文に、指定されたfilter条件を満たす脅威が含まれている場合。

false - メッセージ本文に、指定された条件を満たす脅威が存在しない場合。

機能

threats

1つのオプション引数filter、つまりThreatFilterテーブルを受け取る関数(引数がない場合は、空のテーブルを使用するのと同じです)。HTTPメッセージ本文で検出されたすべての脅威を反復処理できる反復子関数を返します。脅威は、Virusテーブルを使用して指定されます。

機能

content_type

HTTPリクエストまたはレスポンスのContent-Typeヘッダーから取得された本文のMIMEタイプに関する情報が含まれます(解析されているメッセージのタイプによって異なります)。

テーブルContentType

scan_error

本文のスキャンエラー(発生した場合)。それ以外の場合はnil。以下の値を使用できます。

"path_not_absolute" - 指定されたパスは絶対パスではありません。

"file_not_found" - ファイルが見つかりませんでした。

"file_not_regular" - ファイルは通常のファイルではありません。

"file_not_block_device" - ブロックデバイスではありません。

"name_too_long" - 名前が長すぎます。

"no_access" - アクセスが拒否されました。

"read_error" - 読み取りエラーが発生しました。

"write_error" - 書き込みエラー。

"file_too_large" - ファイルが大きすぎます。

"file_busy" - ファイルは使用中です。

"unpacking_error" - アンパックエラー。

"password_protected" - アーカイブはパスワードで保護されています。

"arch_crc_error" - CRCアーカイブエラー。

"arch_invalid_header" - 無効なアーカイブヘッダー。

"arch_no_memory" - アーカイブを解凍するための十分なメモリがありません。

"arch_incomplete" - 不完全なアーカイブ。

"can_not_be_cured" - ファイルを修復できません。

"packer_level_limit" - 圧縮されたオブジェクトのネスティングレベルの上限を超えました。

"archive_level_limit" - アーカイブのネスティングレベルの上限を超えました。

"mail_level_limit" - メールファイルのネスティングレベルの上限を超えました。

"container_level_limit" - コンテナのネスティングレベルの上限を超えました。

"compression_limit" - 圧縮率の上限を超えました。

"report_size_limit" - レポートサイズの上限を超えました。

"scan_timeout" - スキャンタイムアウトの上限を超えました。

"engine_crash" - スキャンエンジンの障害。

"engine_hangup" - スキャンエンジンのハングアップ。

"engine_error" - スキャンエンジンエラー。

"no_license" - アクティブなライセンスが見つかりません。

"multiscan_too_late" - マルチスキャンエラー。

"curing_limit_reached" - 修復試行の上限を超えました。

"non_supported_disk" - サポートされていないディスクタイプ。

"unexpected_error" - 予期しないエラー。

文字列

無効になったメタメソッドなし

テーブルVirus

このテーブルでは脅威を指定します。

フィールド

説明

データタイプ

name

脅威の種類(Doctor Webの分類による)

文字列

type

脅威の種類(Doctor Webの分類による)。以下の値を使用できます。

"known_virus" - 既知の脅威(ウイルスデータベースに登録されている脅威)。

"virus_modification" - 既知の脅威の亜種。

"unknown_virus" - 未知の脅威、疑わしいオブジェクト。

"adware" - 広告プログラム。

"dialer" - ダイアラープログラム。

"joke" - ジョークプログラム。

"riskware" - 潜在的に危険なプログラム。

"hacktool" - ハッキングツール。

文字列

無効になったメタメソッドなし

テーブルThreatFilter

このテーブルでは脅威のフィルターを指定します。フィールドはすべてオプションです。

フィールド

説明

データタイプ

category

脅威が該当するカテゴリーのリスト(大文字と小文字は区別されません)。Virusテーブルのtypeフィールドの説明にあるカテゴリーのリストを参照してください。

文字列または文字列のテーブル

category_not

脅威が該当しないカテゴリーのリスト(大文字と小文字は区別されません)。

文字列または文字列のテーブル

無効になったメタメソッドなし

フィルターフィールドが指定されていない(値がnilである)場合、脅威はフィルターと一致します。複数のフィルターフィールドが指定されている場合、条件は接続詞(論理積)によって結合されます。フィルターフィールドがテーブル(リスト)の場合、オブジェクトは少なくとも1つのテーブル(リスト)の項目と一致する必要があります。

使用例:

1. HTTPメッセージで見つかったすべての脅威の名前をログへ書き込む。

local dw = require "drweb"

function message_hook(ctx)
  for virus in ctx.body.threats() do
   dw.notice("threat found: " .. virus.name)
  end
  return "pass"
end

2. カテゴリーフィルターに一致する脅威名と、脅威が検出されたメッセージ部分の名前をログに書き込む。

local dw = require "drweb"

function message_hook(ctx)
  for v in ctx.body.threats({category = "known_virus"}) do
   dw.notice("found known virus: " .. v.name)
  end
  return "pass"
end

利用可能な補助モジュール

LuaのプログラムスペースでDr.Web for UNIX Internet Gatewaysとやり取りするために、次の特定のモジュールをインポートできます。

モジュール名

機能

Luaプログラムを起動したDr.Web for UNIX Internet GatewaysコンポーネントのログにLuaプログラムからのメッセージを記録する機能と、Luaプロシージャの非同期実行の手段を提供するモジュール

Dr.Web LookupDモジュールを呼び出して、外部ソースからデータを要求するためのツールを提供するモジュール

文字列と正規表現を一致させるためのインターフェースを提供するモジュール

Dr.Web ICAPD設定パラメータ値を持つテーブルを提供するモジュール

drwebモジュールの内容

1.機能

このモジュールには、次のような機能があります。

LuaプログラムからのメッセージをDr.Web for UNIX Internet Gatewaysコンポーネントログに保存する:

log(<level>, <message><message>文字列をDr.Web for UNIX Internet Gatewaysログ<level>レベル(必要なレベルは、「debug」「info」「notice」「warning」「error」を使用して定義します)で書き込みます。

debug(<message><message>文字列をDr.Web for UNIX Internet GatewaysログDEBUGレベルで書き込みます。

info(<message><message>文字列をDr.Web for UNIX Internet GatewaysログINFOレベルで書き込みます。

notice(<message><message>文字列をDr.Web for UNIX Internet GatewaysログNOTICEレベルで書き込みます。

warning(<message>)<message>文字列をDr.Web for UNIX Internet GatewaysログWARNINGレベルで書き込みます。

error(<message><message>文字列をDr.Web for UNIX Internet GatewaysログERRORレベルで書き込みます。

Luaプロシージャの同期を管理する:

sleep(<sec.>はこのLuaプロシージャインスタンスの実行を指定された秒数で一時停止します。

async(<Lua function>[, <argument list>])は、指定された関数を非同期的に起動し、指定された引数リストに渡します。async関数呼び出しはすぐに完了し、戻り値(Futureテーブル)を使用すると、<Lua function>の結果を取得できます。

IpAddressテーブルにIPアドレスを追加する:

ip(<address>は、IpAddressテーブルの形式で<address>文字列として送信される、IPアドレスを指定します。IPv4またはIPv6アドレスのいずれかを使用できます。

テキストファイルから外部データをアップロードする:

load_set(<file path>は、指定されたテキストファイルのコンテンツからtrue値を含むテーブルを生成します。ファイルから読み取られた文字列はキーとして使用されます。空の文字列と空白を含む文字列は無視されます。

load_array(<file path>は、指定されたテキストファイルのコンテンツから文字列の配列を生成します。空の文字列と空白文字のみで構成される文字列は無視され、配列には含まれません。

2.テーブル

Futureテーブルは、async関数を使用して関数を実行した後の保留中の結果を表します。

フィールド

説明

データタイプ

wait

async関数を使用して開始した関数の結果を返す関数。関数がまだ実行を完了していない場合は、完了を待って結果を返します。waitが呼び出される前に関数が完了した場合、結果はすぐに返されます。開始された関数が失敗した場合、wait呼び出しは同じエラーを生成します。

機能

無効になったメタメソッド:なし

IpAddressテーブルはIPアドレスを表します。

フィールド

説明

データタイプ

belongs

IpAddressテーブルに保存されているIPアドレスが、指定されたサブネット(IPアドレス範囲)に所属しているかどうかを確認する関数

"<IP address>"または"<IP address>/<mask>"のような文字列を唯一の引数として受け取ります。ここで、<IP address>はホストアドレスまたはネットワークアドレス("127.0.0.1"など)、<mask>はサブネットワークマスク("255.0.0.0"などのIPアドレスとして、または"8"などの数値形式で指定できます)です。

次のブール値を返します。

trueは、アドレスが指定されたアドレスの少なくとも1つと等しいか、指定されたサブネット(IPアドレスの範囲)の少なくとも1つに属していることを示します。

false - それ以外の場合。

機能

無効になったメタメソッド:

__tostringは、文字列内のIpAddressを変更する関数(例:"127.0.0.1"(IPv4)または"::1"(IPv6))です。

__concatは、IpAddressを文字列に結合する関数です。

__eqは、2つのIpAddressが等しいことを確認する関数です。

__bandは、マスクを適用するための関数(例:dw.ip('192.168.1.2') & dw.ip('255.255.254.0'))です

3.

非同期的に開始される手順によって生成されるメッセージをログへ書き込む:

local dw = require "drweb"

-- This function waits two seconds and returns a string,
-- received as an argument
function out_msg(message)
 dw.sleep(2)
 return message
end

-- "Main" function
function intercept(ctx)
 -- Output of a string at the NOTICE level to the Dr.Web for UNIX Internet Gateways log
 dw.notice("Intercept function started.")

 -- An asynchronous start of two copies of the out_msg function
 local f1 = dw.async(out_msg, "Hello,")
 local f2 = dw.async(out_msg, " world!")

 -- Waiting for the completion of the copies of the function
 -- out_msg and output its results to log
 -- the Dr.Web for UNIX Internet Gateways log at the DEBUG level
 dw.log("debug", f1.wait() .. f2.wait())
end

スケジュールされた手順を作成する:

local dw = require "drweb"

-- Save the table Future in the future global variable in order
-- to preven the removal by the garbage collector
future = dw.async(function()
   while true do
     -- Everyday, the following message is displayed in the log
     dw.sleep(60 * 60 * 24)
     dw.notice("A brand new day began")
   end
end)

文字列で表現されたIPアドレスをIpAddressテーブルに変更する:

local dw = require "drweb"

local ipv4 = dw.ip("127.0.0.1")
local ipv6 = dw.ip("::1")
local mapped = dw.ip("::ffff:127.0.0.1")

 

drweb.lookupモジュールの内容

1.機能

このモジュールは次の機能を提供します。

lookup(<request>, <parameters>は、Dr.Web LookupDモジュールを介して利用できる外部ストレージからデータを要求します。<request>引数は、Dr.Web LookupD設定内のセクション(文字列<type>@<tag>)に対応している必要があります。<parameters>引数は任意で、リクエストを生成するために使用される置換を表します。以下の自動的に許可されるマーカーを使用できます。

$u$Uは、クライアントコンポーネントによって送信されたユーザー名(user)に自動的に置き換えられます。

$d$Dは、クライアントコンポーネントによって送信されたドメイン(domain)に自動的に置き換えられます。

これらの引数はテーブルとして設定されます。このテーブルのキーと値は文字列でなければなりません。この関数は、リクエストの結果である文字列の配列を返します。

check(<checked string><request><parameters>は、Dr.Web LookupDモジュールを介して利用できる外部リポジトリで<checked string>が見つかった場合にtrueを返します。引数<request>および<parameters>lookup関数の引数と同じです(上記を参照)。<checked string>引数は、文字列または__tostringメタメソッドを持つテーブル(つまり、文字列にフォーマットできる)であると想定されます。

2.

LookupD.LDAP.usersデータソースから取得したユーザーのログリストへ書き込む:

local dw = require "drweb"
local dwl = require "drweb.lookup"

-- "Main" function
function intercept(ctx)
 -- Writing the string at the NOTICE level to the Dr.Web for UNIX Internet Gateways log
 dw.notice("Intercept function started.")

 -- Writing the request results to the Dr.Web for UNIX Internet Gateways log
 -- to the 'ldap@users' data source
 for _, s in ipairs(dwl.lookup("ldap@users", {user="username"})) do
   dw.notice("Result for request to 'ldap@users': " .. s)
 end

end

drweb.regexモジュールの内容

1. 機能

このモジュールは次の機能を提供します。

search(<template>, <text>[, <flags>]) - <text>文字列に<template>正規表現と一致するサブストリングが含まれている場合はtrueを返します。オプションの<flags>パラメータ(整数)は、関数の動作に影響を与える一連のフラグであり、論理和でつなげられます。

match(<template>, <text>[, <flags>]) - <template>正規表現がそのサブストリングだけでなく<text>ストリング全体と一致しなければならない点を除いてsearchと同じです。

2. 利用可能なフラグ

ignore_caseはテキストの大文字と小文字を区別しません。

3. 例

local rx = require "drweb.regex"

rx.search("te.?t", "some TexT") -- false
rx.search("te.?t", "some TexT", rx.ignore_case) -- true

rx.match("some.+", "some TexT") -- true

drweb.configモジュールの内容

1. 機能

このモジュールには関数はありません。

2. 利用可能なテーブル

このモジュールは、次のフィールドを持つテーブルを提供します。

フィールド

説明

データタイプ

whitelist

Whitelist設定パラメータの値。

文字列の配列

blacklist

Blacklist設定パラメータの値。

文字列の配列

adlist

Adlist設定パラメータの値。

文字列の配列

block_url_categories

ブロックされるURLカテゴリーのリスト(Yesに設定されたBlock*パラメータ値に基づく)。

文字列の配列

block_threats

ブロックされる脅威カテゴリーのリスト(Yesに設定されたBlock*パラメータ値に基づく)。

文字列の配列

block_unchecked

BlockUnchecked設定パラメータの値。

論理

無効になったメタメソッドなし

3. 例

local cfg = require "drweb.config"

function message_hook(ctx)

  -- Block messages containing threats
  -- from the list of threats to be blocked
  if ctx.body.has_threat{category = cfg.block_threats} then
  return "block"
  end

  -- To permit access to all other resources
  return "pass"

end