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
22
モダンmod_perl入門 #yapcasia
xtetsuji
0
14
札幌でテンプレート #hokkaidopm
xtetsuji
0
22
すごいmod_perl
xtetsuji
0
10
Perl WAF Overview, with mod_perl - Hokkaido.pm#7 #hokkaidopm
xtetsuji
0
9
PerlのTwitterモジュールの紹介
xtetsuji
0
14
文字化け2011〜まだまだ化けます〜
xtetsuji
0
12
mod_perl温故知新 〜Perl CGIの高速化からメールサーバまで〜
xtetsuji
0
9
Other Decks in Technology
See All in Technology
困難を「一般解」で解く
fujiwara3
7
1.6k
データベースの負荷を紐解く/untangle-the-database-load
emiki
2
540
Pwned Labsのすゝめ
ken5scal
2
520
What's new in Go 1.24?
ciarana
1
110
Aurora PostgreSQLがCloudWatch Logsに 出力するログの課金を削減してみる #jawsdays2025
non97
1
230
Amazon Q Developerの無料利用枠を使い倒してHello worldを表示させよう!
nrinetcom
PRO
2
120
【詳説】コンテンツ配信 システムの複数機能 基盤への拡張
hatena
0
280
1行のコードから社会課題の解決へ: EMの探究、事業・技術・組織を紡ぐ実践知 / EM Conf 2025
9ma3r
12
4.4k
EDRの検知の仕組みと検知回避について
chayakonanaika
12
5.2k
Oracle Database Technology Night #87-1 : Exadata Database Service on Exascale Infrastructure(ExaDB-XS)サービス詳細
oracle4engineer
PRO
1
210
わたしがEMとして入社した「最初の100日」の過ごし方 / EMConfJp2025
daiksy
14
5.3k
4th place solution Eedi - Mining Misconceptions in Mathematics
rist
0
150
Featured
See All Featured
Designing for Performance
lara
605
68k
Java REST API Framework Comparison - PWX 2021
mraible
29
8.4k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
How to train your dragon (web standard)
notwaldorf
91
5.9k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
KATA
mclloyd
29
14k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Agile that works and the tools we love
rasmusluckow
328
21k
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/)
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠