* pukiwikiの動作ログをとる [#u98540c3]

- ページ: [[BugTrack2]]
- 投稿者: [[フォルグロス]]
- 優先順位: 低
- 状態: 提案
- カテゴリー: 本体新機能
- 投稿日: 2007-03-10 (土) 12:03:04
- バージョン: 1.4.7

** メッセージ [#uf10a85a]
いつ、どこで、どのような悪意が行われているのか、pukiwikiの動作ログを取るのはどうでしょうか。

現状でもページ編集にはメール送信機能が付いていますが、(それも含めて)今回はあらゆる動作ログと、必要であればメール送信を行う方法です。

試作品は[[PukiWiki改造/pukiwikiの動作ログをとる>http://aden.jias.jp/dt/?PukiWiki%B2%FE%C2%A4%2Fpukiwiki%A4%CE%C6%B0%BA%EE%A5%ED%A5%B0%A4%F2%A4%C8%A4%EB]]です。

経緯は[[official:欲しいプラグイン/285]]です。

試作品内にtodoが多いですが、方向性が間違ったまま進むと困るのでいろいろご指摘いただけると幸いです。

(特に、ログのサイズが増加した際の処理をどうするか考え中。無条件破棄も嫌だし、かといって本体側の動作をとめるのも嫌だし。)

※複数人でPukiwikiを管理する際に、他の誰かが何をしたかを知るのにも使えるみたいです。
--------
- 作りたいという気持ちをとてもお持ちの様ですし、ある意味お解りの様ですので、無理しない程度に Happy Hacking! と言っておくのが良いのだろうと思うのですが、誰もがHappyになると証明できるような状態にする、というのもdevサイトの仕事なので・・・誰でも言いそうなツッコミから入れさせていただきます。 -- [[henoheno]] 
-- ファイルの先頭に、著作年、著作者、ライセンス、あればバージョンを明記して下さい。 -- [[henoheno]] &new{2007-03-12 (月) 00:22:37};&new{2007-03-12 (月) 00:07:47};
-- どこかに概略をまとめていただきたく。個別にバージョンをつけていただいて、どのバージョンに関する解説かも知りたいです。 -- [[henoheno]] &new{2007-03-12 (月) 00:17:44};
-- どんなイベントがあるのか、また、それぞれどうするのか明確になっていたでしょうか。 -- [[henoheno]] &new{2007-03-12 (月) 00:23:50};

バージョン類は、試作品の次回更新時にやっておこうかと思います。ご指摘ありがとうございます。

現状の概要(使い方)は以下のとおりです。

:イベントログの表示の仕方|
index.php?cmd=eventlogの形式でプラグインから表示。管理者パスワードを尋ねられます。ログインするとログファイル本体(convert_html済み)を表示し、そこからボタンを押下すると添付ファイルも表示できます。
:イベントログへの追記の仕方|
以下の使い方に示すとおり、pukiwikiのどこからでもplugin_eventlog_appendLogを呼び出してください。現状ではプラグイン色が強くなっていますので、早い段階でeventlog.inc.phpを読み込んでおく必要があります。フレームワークに組み込んでいただくことも若干期待してますので、その場合は関数の名称からプラグイン色がなくなると思います。
:ブロック型のプラグイン呼び出し|
ありません。
:インライン型のプラグイン呼び出し|
cmd=eventlog形式の呼び出しの場合のみ、添付ファイルを呼び出すのに使います。それ以外では空文字を返します。

概要(関数)は以下のとおりです。

:plugin_eventlog_appendLog($array)|
ログへの追記を行います。追記する内容は、引き数(配列)に格納されている文字列を整形したものです。戻り値はありません。
::$array['cmd']|
ログの発生個所を示します(文字列、短めで改行を含まないこと)。編集履歴であればedit、commentプラグインによる書き込みはcomment、pukiwiki本体であればFrameWorkなどとするのが良いと思います。
::$array['result']|
操作の結果を示します(文字列、短めで改行を含まないこと)。成功、失敗、ノートなど。デフォルトでは、succeedであれば青色に、failedであればオレンジ色に着色して表示します。
::$array['message']|
結果のみならずログに残しておきたい事項を文章で残します(文字列、長くて改行を含んでも可)。ログファイル本体に書き残すほど多量の文章であれば、添付ファイルの(ような)形でログ本体とは分けて保存されます。
::$array['date']|
イベント発生日付。本関数内で自動的に定義するので任意文字列の設定はできません。
::$array['ip']|
アクセス者のIPアドレス。本関数内で自動的に定義するので任意文字列の設定はできません。
::$array['sendmail']|
ログを追記するだけではなく、メールでの送信を要求する場合にTRUE。そうでない場合にFALSE(未定義も可)。実際に送信するかどうかは本関数内で判断します。メールアドレスが設定されてない、sendmail環境がないなどの理由で要求が通らないケースや、本関数内の設定で独自に設定された送信基準で上書きする場合があります。

 //使い方
 plugin_eventlog_appendLog(array(
  'cmd'=>'comment',
  'result'=>'failed',
  'message'=>"NGワードを検出したため書き込みを停止しました。\nページ名:$page\nコメント:$comment",
 ));

概要(ファイル)は以下のとおりです。

:ログファイル|
デフォルトでは/cache/eventlog/というフォルダ内に作成。ログファイル本体と、長すぎるmessageを保存するための添付ファイルの2種類。どちらも基本的にwiki書式で、convert_html()を通せばwiki上に表示できます。
::ログファイル本体|
デフォルトではevent.log。pukiwiki書式で「|」区切りの表形式。ファイルは追記で書き込んでいくので、新しいものほどファイルの後のほうにあります。なお、改行は&br;で表現することで1行1情報となってますので、新しい順に表示したければファイルを読み込んだ後に行単位で上下逆転させればOK。
:::ファイルMAXサイズ時の動作|
最大サイズは設定で変更できます。最大値を超えた場合、次回書き込み時にログファイルの前半が消えて後半(新しいほう)のみが残ります。
::添付ファイル|
本当に添付しているわけではないので呼び方が怪しいのはともかく、2007-03-13_12-00-00.txtのように日時のファイル名。messageが50byte以上の場合にイベント1つあたり1ファイルが作成されます。wikiページのでっかい編集差分などをログ本体に記録すると見栄えが悪くなることの対策として分割しました。
:::ファイルMAXサイズ時の動作|
未定義。現状ではFTPで消すまで残ります。

想定されるイベントは以下です。

:フレームワーク内のpage_write関数|
pukiwiki_mail_notify()で送信している編集履歴と同じものをログに。メール送信環境がなく「更新日付を維持」した編集の把握などに使えます。複数人でpukiwikiを管理している場合の変更の把握も可能。
:comment、edit|
NGワード、spamフィルタにかかった書き込みのログ取得。現状、NGワードやフィルタを追加しても「誰がひっかかったか」を知ることができなければ各設定の妥当性が分からないし、「実際に意図どおりひっかかってるのか」が分からないと設定を煮詰めるモチベーションが湧きにくい。ログの取り方によっては、不本意にひっかかった書き込みをそこからピックアップして救済することもできます。
:パスワードとの照合|
照合の失敗を記録することで、パスワードの解読を目指す攻撃を記録。現状では、日ごろからhttpのログを見るような人(?)でないと100万回辞書アタックしても気づかないと思う。無料サーバーだとhttpログが見れないケースもあります。
:その他|
気軽で簡単にログ取りとsendmailができるコンポーネントとして、各プラグイン方面からも使っていただきたく。

その他。

-plugin_eventlog_appendLogの引き数が配列である理由 - 仕様が固まってなかったので自由の利くやり方としてですが、引き数にオプション(今回のsendmailみたいな未定義を可とする引き数)が増えるとソースの可読性が落ちるの対策もあります。
-ログファイルがwiki文法である理由 - 改行を含むCSVは処理が重そうで、wiki管理者なら生ログを読んでも可読性が高いです。
- 上記、長くてまずかったら試作品ページのほうに移動させます。 -- [[フォルグロス]] &new{2007-03-13 (火) 14:23:28};

#comment

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.4+ © 2001-2022 PukiWiki Development Team. Powered by PHP 8.2.12. HTML convert time: 0.354 sec.

SourceForge