SlideShare una empresa de Scribd logo
1 de 31
Perl WAF Overview,
  with mod_perl
        株式会社fonfun
   尾形 鉄次 (OGATA Tetsuji)
       Twitter: @xtetsuji
   2012/05/12 Hokkaido.pm#7
*Preface for readers*

• このスライドは 2012/05/13に行われた
 Hokkaido.pm#7にて「飛び入りLT」を
 行った際に休憩時間中の10分で作った
 即席スライドに、実際のトーク内容を
 織りまぜて再編集したものです
自己紹介
自己紹介

• 尾形 鉄次 (OGATA Tetsuji)
• Twitter: @xtetsuji
• Blog: http://post.tetsuji.jp/
• 出身は北海道河東郡音更町(帯広市の隣)
• 大学で上京して現在は東京の会社に勤務
自己紹介
• Hokkaido.pm 3回目の参加
• Hokkaido.pm#5「mod_perl温故知新」
• Hokkaido.pm#6「mod_perl Hacks PHP」
• モダンPerlに乗れていない30代
• mod_perl Hacker…なのか?
所属紹介

• 株式会社fonfun(フォンファン)
 http://www.fonfun.co.jp/
 • 主力製品:リモートメール
   http://rmail.jp/
Perl WAF,
ancient and modern
Perl WAF, ancient

• raw (not WAF?)
• CGI::Application
• ...etc
Perl WAF, modern

• Catalyst
• Jifty
• ...etc
Perl WAF, post-modern

• Dancer
• Mojolicious
• Amon2
• Kossy
• ...etc
What is WAF?
• 「MVC分離」を促進するもの?
 • 違う
• Catalystの失敗例?
 • ModelをWAFに密着させると、外側の
  管理ツール等から使いづらくなる
What is WAF?


• 私はこう思う…
 HTTP Request/Responseの抽象化
What is WAF?

• HTTP Request/Responseの抽象化
 • Web Serverごとの差異を吸収
 • Catalyst::Engine:: とかのバッドノウハウ
• PSGI/Plackの結実へ
そんな細かい事より
 mod_perl2
みんな大好き
mod_perl2
Latest Perl WAF fashion

• Sinatra (WAF, powered by Ruby) Like
• Perl post-modern WAFs almost have
  Sinatratic syntax
• Lightweight
• Controller oriented
WAF by mod_perl2

• mod_perl1 は割愛、mod_perl2 を使う
• mod_perl2 のResponseHandlerを Sinatra
  Like にすれば WAF って言っていいん
  ジャマイカ?
WAF by mod_perl2
• 「Web Serverごとの差異を吸収」とか
  さっき言っていた事は無視!

• Apache2/mod_perl2べったり
• mod_perl2の $r (Apache2::RequestRec)は
  Request/Responseを良く抽象化している
mod_perl2 handler’s
simple “Hello world”
package MyApache2::Hello;

use strict;
use warnings;

use Apache2::RequestRec;
use Apache2::RequestIO;
use Apache2::Const -compile => qw(OK);

sub handler {
    my $r = shift;
    $r->content_type("text/plain");
    $r->print("Hello, world");
    return Apache2::Const::OK;
}

1;

__END__

<Location />
    PerlResponseHandler MyApache2::Hello
</Location>
これをSinatra Likeに
   すればいい
ならばと書いてみた
MyApache2::Sinatratic
package MyApache2::Sinatratic;

use strict;
use warnings;

# $CALLBACK->{$handler_package}->{$http_method} = [ [$url, $handler], ... ];
my $CALLBACK = {};

sub import {
    my $pkg = shift;
    my @args = @_;
    my $callpkg = caller(0);
    for my $method (qw(get post put del)) {
        $CALLBACK->{$callpkg}->{$method} = [];
    }

    # sub handler definition
    require Apache2::RequestRec;
    require Apache2::RequestUtil;
    require APR::Table;
    no strict 'refs';
    *{"$callpkg::handler"} = &import_handler;
    for my $method (qw(get post put del)) {
        *{"$callpkg::$method"} = sub {
            my ($url, $handler) = @_;
            push @{$CALLBACK->{$callpkg}->{$method}}, [$url, $handler];
        };
    }
    *{"$callpkg::default"} = sub {
        my $handler = shift;
        $CALLBACK->{$callpkg} ||= {};
        $CALLBACK->{$callpkg}->{default} = $handler;
    };
}
概要はこんな感じ
mod_perl2 handler’s
Sinatratic “Hello world”
package MyApache2::Hello2;

use strict;
use warnings;

use Apache2::RequestRec;
use Apache2::RequestIO;
use Apache2::Const -compile => qw(OK);

use MyApache2::Sinatratic;

get '/' => sub {
    my $r = shift;
    $r->content_type("text/plain");
    $r->print("Hello, world");
    return Apache2::Const::OK;
};

1;

__END__

<Location />
    PerlResponseHandler MyApache2::Hello2
</Location>
Sinatraっぽくなった!
mod_perl2もWAFだ!
MyApache2::Sinatratic

• …というのは完全なるジョーク
• 足りない機能、バグ満載
 • プレースホルダに対応したつもり程度
MyApache2::Sinatratic
• 物好きのためにGistに放り込んだ
• 使う人はいないと思うけど、使おうと
 思う勇者はCAVEATSを熟読して!

• 勇者が集まればModPerl::Sinatratic(仮称)
 プロジェクトもやっちゃうかも!
MyApache2::Sinatratic
• 書いていて思った事
 • Sinatra LikeなWAFって、Plack無しでも
   こう作ればいいんだと勉強できた

 • シンボルテーブルいじり楽しい♪
 • I ♡ Perl!
ご清聴
ありがとうございました

Más contenido relacionado

La actualidad más candente

about Thrift
about Thriftabout Thrift
about Thrift
Naoya Ito
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
Naoya Ito
 
20120327 phpstudy58-phake
20120327 phpstudy58-phake20120327 phpstudy58-phake
20120327 phpstudy58-phake
Katsuhiro Ogawa
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
kjwtnb
 
Beginners Session at Perl Beginners #4
Beginners Session at Perl Beginners #4Beginners Session at Perl Beginners #4
Beginners Session at Perl Beginners #4
Yusuke Hosokoshi
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
do_aki
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
jamadam
 

La actualidad más candente (20)

最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
0x300
0x3000x300
0x300
 
Functions
FunctionsFunctions
Functions
 
Symfony2からdoctrine mongo db odmを使ってみる
Symfony2からdoctrine mongo db odmを使ってみるSymfony2からdoctrine mongo db odmを使ってみる
Symfony2からdoctrine mongo db odmを使ってみる
 
about Thrift
about Thriftabout Thrift
about Thrift
 
初見では読みづらいPerl
初見では読みづらいPerl初見では読みづらいPerl
初見では読みづらいPerl
 
初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外初級者向けレッスン 51回 ─── 例外
初級者向けレッスン 51回 ─── 例外
 
Marionettejs getting started
Marionettejs getting startedMarionettejs getting started
Marionettejs getting started
 
php in ruby
php in rubyphp in ruby
php in ruby
 
Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?Consul は 全自動オーケストレーションの 夢を見るか?
Consul は 全自動オーケストレーションの 夢を見るか?
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LTNorikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
Norikraで作るPHPの例外検知システム YAPC::Asia Tokyo 2015 LT
 
20120327 phpstudy58-phake
20120327 phpstudy58-phake20120327 phpstudy58-phake
20120327 phpstudy58-phake
 
サーバー実装いろいろ
サーバー実装いろいろサーバー実装いろいろ
サーバー実装いろいろ
 
Beginners Session at Perl Beginners #4
Beginners Session at Perl Beginners #4Beginners Session at Perl Beginners #4
Beginners Session at Perl Beginners #4
 
php and sapi and zendengine2 and...
php and sapi and zendengine2 and...php and sapi and zendengine2 and...
php and sapi and zendengine2 and...
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -jQuery Performance Tips – jQueryにおける高速化 -
jQuery Performance Tips – jQueryにおける高速化 -
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 
test
testtest
test
 

Similar a Perl WAF Overview, with mod_perl - Hokkaido.pm#7 #hokkaidopm

Php in ruby
Php in rubyPhp in ruby
Php in ruby
do_aki
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
Yohei Fushii
 
20120307 CakePHP Study in Tokyo
20120307 CakePHP Study in Tokyo20120307 CakePHP Study in Tokyo
20120307 CakePHP Study in Tokyo
ichikaway
 
Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for Perl
Hideaki Ohno
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
lestrrat
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
 

Similar a Perl WAF Overview, with mod_perl - Hokkaido.pm#7 #hokkaidopm (20)

FuelPHPをさわってみて
FuelPHPをさわってみてFuelPHPをさわってみて
FuelPHPをさわってみて
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
Niigata.pm #1
Niigata.pm #1Niigata.pm #1
Niigata.pm #1
 
CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
20120307 CakePHP Study in Tokyo
20120307 CakePHP Study in Tokyo20120307 CakePHP Study in Tokyo
20120307 CakePHP Study in Tokyo
 
FukuokaPHP 3
FukuokaPHP 3FukuokaPHP 3
FukuokaPHP 3
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
Chiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for PerlChiba pm#1 - ArangoDB for Perl
Chiba pm#1 - ArangoDB for Perl
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
The master plan of scaling a web application
The master plan ofscaling a web applicationThe master plan ofscaling a web application
The master plan of scaling a web application
 
PHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptxPHPCON_TOKYO_2022_Bigginer.pptx
PHPCON_TOKYO_2022_Bigginer.pptx
 
Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!Dive into the Cloud with our buddy, lovely PHP!
Dive into the Cloud with our buddy, lovely PHP!
 
Perl 非同期プログラミング
Perl 非同期プログラミングPerl 非同期プログラミング
Perl 非同期プログラミング
 
Silex入門
Silex入門Silex入門
Silex入門
 
「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう「Html sql」で図書館hpにアクセスしてみよう
「Html sql」で図書館hpにアクセスしてみよう
 
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)GMO TECHNOLOGY BOOT CAMP2015(PHP編)
GMO TECHNOLOGY BOOT CAMP2015(PHP編)
 
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道20123時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
3時間濃縮CakePHP2.1 in PHPカンファレンス北海道2012
 
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 とPHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 

Más de 鉄次 尾形

Más de 鉄次 尾形 (20)

Perl入学式 2018年度の報告
Perl入学式 2018年度の報告Perl入学式 2018年度の報告
Perl入学式 2018年度の報告
 
【公開版】AWS基礎 for 新卒エンジニア
【公開版】AWS基礎 for 新卒エンジニア【公開版】AWS基礎 for 新卒エンジニア
【公開版】AWS基礎 for 新卒エンジニア
 
俺のこだわりデスクのその後
俺のこだわりデスクのその後俺のこだわりデスクのその後
俺のこだわりデスクのその後
 
Hokkaido.pmと7年
Hokkaido.pmと7年Hokkaido.pmと7年
Hokkaido.pmと7年
 
WordPress 運用を支える Perl
WordPress 運用を支える PerlWordPress 運用を支える Perl
WordPress 運用を支える Perl
 
障害対応とその防止策
障害対応とその防止策障害対応とその防止策
障害対応とその防止策
 
働きやすい社内を目指す!二酸化炭素計測ツール
働きやすい社内を目指す!二酸化炭素計測ツール働きやすい社内を目指す!二酸化炭素計測ツール
働きやすい社内を目指す!二酸化炭素計測ツール
 
Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜Perl ウェブ開発の中世〜CGI と Plack の間〜
Perl ウェブ開発の中世〜CGI と Plack の間〜
 
コードの動的生成のお話
コードの動的生成のお話コードの動的生成のお話
コードの動的生成のお話
 
三角関数の加法定理はなぜ難しいのか
三角関数の加法定理はなぜ難しいのか三角関数の加法定理はなぜ難しいのか
三角関数の加法定理はなぜ難しいのか
 
Perlで生きる10年
Perlで生きる10年Perlで生きる10年
Perlで生きる10年
 
穏やかにファイルを削除する続き
穏やかにファイルを削除する続き穏やかにファイルを削除する続き
穏やかにファイルを削除する続き
 
日本全国ぶらりPerl旅
日本全国ぶらりPerl旅日本全国ぶらりPerl旅
日本全国ぶらりPerl旅
 
穏やかにファイルを削除する
穏やかにファイルを削除する穏やかにファイルを削除する
穏やかにファイルを削除する
 
最近のメールまわりのお仕事のお話
最近のメールまわりのお仕事のお話最近のメールまわりのお仕事のお話
最近のメールまわりのお仕事のお話
 
再帰、漸化式、差分方程式とアルゴリズム Gx#20
再帰、漸化式、差分方程式とアルゴリズム   Gx#20再帰、漸化式、差分方程式とアルゴリズム   Gx#20
再帰、漸化式、差分方程式とアルゴリズム Gx#20
 
超小規模環境のMySQL #mysqlcasual
超小規模環境のMySQL #mysqlcasual超小規模環境のMySQL #mysqlcasual
超小規模環境のMySQL #mysqlcasual
 
mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論mod_perlプログラマーがYAPCで語るレガシー開発論
mod_perlプログラマーがYAPCで語るレガシー開発論
 
東京近郊のPerlコミュニティのご紹介 #lcs2015
東京近郊のPerlコミュニティのご紹介 #lcs2015東京近郊のPerlコミュニティのご紹介 #lcs2015
東京近郊のPerlコミュニティのご紹介 #lcs2015
 
4月16日だからFoursquare 位置情報とライフログ
4月16日だからFoursquare 位置情報とライフログ4月16日だからFoursquare 位置情報とライフログ
4月16日だからFoursquare 位置情報とライフログ
 

Último

Último (7)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

Perl WAF Overview, with mod_perl - Hokkaido.pm#7 #hokkaidopm

Notas del editor

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n