はちゅにっき

こっちのブログはまったり更新

優しいモダンな WAF の作り方

Angelos ネタ。
以前 WAF を作ったときにすごくお世話になったソースコード

モダンな WAF の要素

  • Plagger のような拡張性
  • WSGI のようなサーバ抽象化 テスタビリティ
  • Rails のようなフルスタック ユーザビリティ

最小構成要素

Engine -> Dispatcher -> ComponentManager
3つつくると WAF っぽい。
要素は揃っているので、2,3時間でカンタンな WAF なら作れます。

優しいプラグインの作り方

どこでも自由に Hook してね!
はあまりよくない。
それぞれ限定して、限定された範囲内では自由にどうぞ。
という形の方が望ましい。

プラグインの実現方法

  • Life Cycle への Hook
    • Class::Trigger
    • Mouse の Role + Method Modifier
  • メソッドはやす系
    • MouseのRole
    • Exporter
    • 多重継承

Plugin を Role の概念にし、with して使う。
Mouse の befor / after を使ってHookする。
Hookポイントは大文字で!という規約だけをきめておく。
んなときはこんなセットを使ってね!
というデフォルトセットを用意してあげると、TIPSの変な乱立とかがなくていい感じだよ。