Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
mod_perl hacks PHP
Search
OGATA Tetsuji
December 10, 2011
Technology
0
7
mod_perl hacks PHP
2011/12/10 に Hokkaido.pm#6 で発表したスライドです。
OGATA Tetsuji
December 10, 2011
Tweet
Share
More Decks by OGATA Tetsuji
See All by OGATA Tetsuji
Hokkaido.pmがあって YAPCでトークできた
xtetsuji
0
18
モダンmod_perl入門 #yapcasia
xtetsuji
0
13
札幌でテンプレート #hokkaidopm
xtetsuji
0
21
すごいmod_perl
xtetsuji
0
8
Perl WAF Overview, with mod_perl - Hokkaido.pm#7 #hokkaidopm
xtetsuji
0
8
PerlのTwitterモジュールの紹介
xtetsuji
0
14
文字化け2011〜まだまだ化けます〜
xtetsuji
0
11
mod_perl温故知新 〜Perl CGIの高速化からメールサーバまで〜
xtetsuji
0
7
Other Decks in Technology
See All in Technology
Evolving Architecture
rainerhahnekamp
3
250
「隙間家具OSS」に至る道/Fujiwara Tech Conference 2025
fujiwara3
7
6.5k
RubyでKubernetesプログラミング
sat
PRO
4
160
メンバーがオーナーシップを発揮しやすいチームづくり
ham0215
2
140
生成AI × 旅行 LLMを活用した旅行プラン生成・チャットボット
kominet_ava
0
160
2025年の挑戦 コーポレートエンジニアの技術広報/techpr5
nishiuma
0
140
AWS Community Builderのススメ - みんなもCommunity Builderに応募しよう! -
smt7174
0
180
機械学習を「社会実装」するということ 2025年版 / Social Implementation of Machine Learning 2025 Version
moepy_stats
5
1.1k
Azureの開発で辛いところ
re3turn
0
240
Godot Engineについて調べてみた
unsoluble_sugar
0
400
Amazon Route 53, 待ちに待った TLSAレコードのサポート開始
kenichinakamura
0
170
商品レコメンドでのexplicit negative feedbackの活用
alpicola
2
360
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
870
How to Ace a Technical Interview
jacobian
276
23k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
120k
Thoughts on Productivity
jonyablonski
68
4.4k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
173
51k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
How to train your dragon (web standard)
notwaldorf
89
5.8k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Scaling GitHub
holman
459
140k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Transcript
mod_perl hacks PHP גࣜձࣾfonfun ඌܗ మ࣍ (OGATA Tetsuji) Twitter: @xtetsuji
2011/12/10
ࣗݾհ
ࣗݾհ • ඌܗ మ࣍ (OGATA Tetsuji) • Twitter: @xtetsuji •
Blog: http://post.tetsuji.jp/ • ग़ւಓՏ౦܊Իߋொ(ଳࢢͷྡ) • େֶͰ্ژͯ͠ݱࡏ౦ژͷձࣾʹۈ
ࣗݾհ • Hokkaido.pm#5Ͱʮmod_perlԹނ৽ʯ ͱ͍͏τʔΫΛਓੜॳ൸࿐ • ެͷͰͷτʔΫࠓճͰ3ճ • ϞμϯPerlʹΕ͍ͯͳ͍30 • झຯ:
ΫϥγοΫԻָɺΧϑΣࢄࡦɺ ࿏ઢόε
ॴଐհ • גࣜձࣾfonfun(ϑΥϯϑΝϯ) http://www.fonfun.co.jp/ • ओྗɿϦϞʔτϝʔϧ http://rmail.jp/ • ҙஂମg15ΞιγΤʔγϣϯ http://g15.jp/
ॴଐհ • גࣜձࣾfonfun(چ໊ࣾ:ωοτϏϨοδ) • 1999͔ΒΣϒϝʔϧ (໊:ϦϞʔτϝʔϧ)Λӡ༻ • 2003ʹୈ4ੈγεςϜ(Perl + Apache/
mod_perl + Oracle + Post fi x)Λ։ൃ • ࠷ۙ৽͍ٕ͠ज़తͳࢼΈʹνϟϨϯδத
Hokkaido.pm++ • ւಓ(ຊʹ)ࢲͷނڷͰ͢ʂ • ॳεϐʔΧʔͷػձΛ༩͍͍͑ͯͨͩͯ ͋Γ͕ͱ͏͍͟͝·͢ʂ
Agenda
Agenda • mod_perlৼΓฦΓ • PHPৼΓฦΓ • mod_perl Hacks PHP •
Authen/Authz Hacks • Output Filter Hacks
Agenda • લճɺ༁͔ΒͣΓࠐΈ͗ͨ͢ͷͰ • 20ͰεϥΠυ90ຕ࡞ͬͨˠແཧ • ࠓճܰ͘ߦ͖·͢ • ʮmod_perlͱ͔Φϫίϯʯൃݴېࢭ
mod_perlৼΓฦΓ
mod_perlৼΓฦΓ • mod_perlPerl CGIͷߴԽͰ͖Δ • mod_perlͷਅApacheϞδϡʔϧͰ ग़དྷΔ༷ʑͳ͜ͱΛPerlͰॻ͚Δ͜ͱ • લճ(#5)ൃදͨ͠ʮmod_perlԹނ৽ʯ SlideshareͰެ։͍ͯ͠·͢
mod_perlৼΓฦΓ • ࠓճmod_perl2ͷΈͷ͓ • mod_perl1(Apache1.x)ͰωΠςΟϒͷ ϑΟϧλؔ࿈͕·ͩొલͳͷͰ… • ࠓճϑΟϧλؔ࿈ͷ͓͠·͢
PHPৼΓฦΓ
PHPৼΓฦΓ http://ja.wikipedia.org/wiki/PHP:_Hypertext_Preprocessor
PHPৼΓฦΓ • ITۀքͰجຊతͳ • ࢲୡPerl Monger!! ͜͜Hokkaido.pm!! • PHPιϑτΛ͏ͷߏΘͳ͍͚Ͳɺ தΛ͍͡Δ·Ͱ༨Γͨ͘͠ͳ͍
PHP͋Δ͋Δʁ • ൃͨ͠ΣϒΞϓϦ͕PHPͰɺطʹ ୭͔͕উखʹೲͪ͠Ό͍ͬͯΔ • ֖Λ։͚Δͱ࣮ͱ͔͕ςΩτա͗ • ͰɺPerl MongerͷԶ͕मਖ਼͢Μͷʁ •
PHPσόοάͱ͔Ϛδצ(ry
PHP͋Δ͋Δʁ •※ࠓͷ͓ϑΟΫγϣϯͰ͢(ͨͿΜ)
PHP͋Δ͋Δʁ •※େਓͷੈքͷḨࡧ͓߇͍͑ͩ͘͞
େͳࣄͳͷͰ • PHPͱ͍͏ݴޠΛdisͬͯΔ༁Ͱͳ͍ • ྑ͍ιϑτΣΞͨ͘͞Μ͋Γ·͢
PHPͷྑ࣭ιϑτ ͦͷଞ͍Ζ͍Ζʂ
ຊ • PHPͷએஔ͍ͱ͍ͯ… • PHPʹͳΔ͘खΛՃ͑ͣɺػೳΛՃ ͨ͠Γ͢ΔʹͲ͏͢Ε͍͍͔ • Ͱ͖ΕPerlͰग़དྷΕخ͍͠ • ͦ͜Ͱ…
mod_perl hacks PHP
mod_perl hacks PHP • PHP͕࣮ߦ͞ΕΔલޙʹmod_perlͰԿ͔ ϑοΫΛࠩ͠ࠐΊͳ͍͔ • PHPॲཧલʹೝূɾڐՄॲཧ • PHPॲཧޙʹग़ྗΛϑΟϧλ…ʑ
ॲཧϑΣʔζ:mod_perl2 PerlChildInitHandler PerlPostReadRequestHandler PerlInitHandler PerlTransHandler PerlMapToStorageHandler PerlHeaderParserHandler PerlAccessHandler PerlAuthenHandler PerlAuthzHandler
PerlTypeHandler PerlFixupHandler PerlFixupHandler PerlResponseHandler PerlLogHandler PerlCleanupHandler PerlChildExitHandler ※Apache2ʹݩʑରԠ͢ΔϑΣʔζ͕͋Γ·͢ / ※݁ߏলུ͕͋Γ·͢ɻҎԼΛࢀর http://perl.apache.org/docs/2.0/user/con fi g/con fi g.html
Apache2 / mod_perl2 ॲཧϑΣʔζ ※ʮPractical mod_perlʯΑΓൈਮ
Apache2 / mod_perl2 ॲཧϑΣʔζ
͜͜Ͱٙ • Q: PHPPerlResponseHandler͕ର Ԡ͢ΔApache2ϨεϙϯεϑΣʔζҎ֎ ͰԿ͔ົͳ͜ͱΛ͍ͯ͠ͳ͍ͷ͔ • A:͍ͯ͠ͳ͍Β͍͠(͠ͳ͍ͷ͕ϙϦγʔ) • PHPίΞͷ։ൃऀͷ୭͔͕ݴ͍ͬͯͨ
※ιʔεݟ͚ͭΒΕͳͯ͘͢Έ·ͤΜ
ͦΕͰຊ… • ͜ͷଞͷApache্Ͱಈ࡞͢ΔLL ϓϩάϥϜͰ௨༻͢Δ͔…Ͱ… • TomcatͷίωΫλͱ͔ṖͩΒ͚ • FastCGI / mod_{ଞͷݴޠ}
• ͳͷͰࠓճPHPʹݶ͓ͬͨʹ
Authen/Authz Hacks
Authen/Authz Hacks • PHPͷೝূ͕Ϛζ͍έʔε • php.iniͷઃఆ͕Ϛζ͍ • PHPͷsession_start()ͷҰ࿈ͷηο γϣϯؔ࿈ؔͷ͍ํ͕Ϛζ͍ •
ԿϚζ͘ͳͯ͘طଘͷೝূ͕͋Δ
Authen/Authz Hacks • php.inisession_*()ؔͷॾʑͷॲཧΛ σόοά͢Δ͘Β͍ͳΒ… • طʹଞαΠτͰPerlͰ࡞ͬͨطଘͷೝূ ͖αΠτ͕͋ΔͳΒ… • →PHPଆͷηογϣϯཧΛࣺͯͯɺ
γϯάϧαΠϯΦϯ(SSO)Մೳʹ
CookieͷಡΈॻ͖
CookieͷಡΈॻ͖ • sub handler { my $r = shift; ...
} આ໌লུ • Raw Cookie ΛಡΈॻ͖͢ΔϞδϡʔϧ HTTP::Cookies ͍Ζ͍Ζ͋Γ·͢ • Apache2 (libapreq) ʹ Apache2::Cookie APR::Request::Cookie ͷϞδϡʔϧ ͋Γ
AAA • ΞΫηείϯτϩʔϧɾೝূɾڐՄ • 3ͭͷσΟϨΫςΟϒ • PerlAccessHandler • PerlAuthenHandler •
PerlAuthzHandler
CPAN Module of Apache2::AuthCookie*
CPAN Module of Apache2::AuthCookie* • Apache2::AuthCookie ࠓͳ͓ਫ਼ྗత ʹϝϯςφϯε͞Ε͍ͯΔ • ࠓճApache2::AuthCookie
ͰσϞΛ࡞ͬ ͯΈΑ͏ͱࢥ͕ͬͨؒʹ߹Θͳ͔ͬͨ • ͢Έ·ͤΜ
Output Filter Hacks
Output Filter Hacks • PHPͷग़ྗͷॻ͖͑ • ApacheͷωΠςΟϒϑΟϧλͳͷͰɺ PHPͷob_*ܥઃఆҰؔແ͠
Output Filter Hacks • ߟ͑ΒΕΔ༻్ɿ • PHPͰॻ͖͖Εͳ͍ॲཧΛಠࣗϚʔΫ Ξοϓͷܗʹ͓͍ͯͯ͠PerlͰஔ • i-modeֆจࣈͷSoftbank͚ม
(Perlͷֆจࣈมٕज़๛Ͱߴ)
Output Filterͷॻ͖ํ • Filter ͷ߹ sub handler { ... }
$r (Request Object)Ͱͳ͘ɺ $f (Filter Object) ΛୈҰҾʹड͚औΔ • PerlOutputFilterHandler σΟϨΫςΟϒ
Output Filterͷॻ͖ํ <VirtualHost *:80> <FilesMatch “.*(html?|php)$”> PerlOutputFilterHandler \ MyApache2::FilterObfuscate </FilesMatch>
</VirtualHost>
Output Filterͷॻ͖ํ
DEMO
Filter͋Ε͜Ε • ύϑΥʔϚϯεೋͷ࣍ͱͯ͠ɺpipeత ͳॲཧͰྑ͍ͳΒApache2.1͔Βͷඪ४ Ϟδϡʔϧmod_ fi lter͕͋Γ·͢ • ݴޠΘͳ͍ɺͱ͍͏͔ ”*.html”
Λ pipeͰw3mʹͯ͠text/plainʹܗͯ͠ ฦ͢ͷܳͰ͖·͢
Filter͋Ε͜Ε
·ͱΊ
·ͱΊ • Apache্ͷPHPͰ͋Εɺॲཧͷલޙʹ mod_perlͰॲཧΛڬΉ͜ͱ͕Ͱ͖Δ • PHPϨεϙϯεϑΣʔζҎ֎Ͱ߇͑ ͳͷͰɺmod_perlΛࢥ͏ଘ͑Δ
࠷ޙʹ
࠷ޙʹ • Webʹmod_perlͷใຊʹগͳ͍ • mod_perl2ͱͳΔͱյ໓త • APR:: Apache2:: ModPerl:: ·ΘΓ
• ଞͷLLΑΓྺ࢙ͷݹ͍Perlݻ༗ͷʁ
ຊPerlվܭը • ʮຊPerlվܭըʯͱ͍͏ϨΨγʔ ͕͔࣌ͬͨPerlͷใݯΛ৽ͯ͠ ͍͘ࢼΈ͕͋ΔΑ͏Ͱ͢
ຊPerlվܭը http://d.hatena.ne.jp/syohex/20111110/1320938963
ຊPerlվܭը • WAFશظͰApache݈ࡏ • ࠓճͷΑ͏ͳγνϡΤʔγϣϯ͋Δ • ͍͟ͱ͍͏࣌ͷͨΊͷmod_perlใΛ ఏڙ͍ͨ͠
ຊPerlվܭը • ʮຊmod_perlվܭըʯΛ͍ͨ͠ • ຊޠͰmod_perl(1 and 2)ͷใΛൃ৴ ͍ͯ͘͠ϙʔλϧαΠτ࡞Λܭըத • τʔΫͰͤͳ͍ྔͷωλެ։
• ࢼΈϒϩάTwitterͰใࠂ͠·͢
ࢀߟจݙ • mod_perl2 User’s Guide (Onyx Neon 2007; http://modperl2book.org/)
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠