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
16
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
32
モダンmod_perl入門 #yapcasia
xtetsuji
0
22
札幌でテンプレート #hokkaidopm
xtetsuji
0
26
すごいmod_perl
xtetsuji
0
12
Perl WAF Overview, with mod_perl - Hokkaido.pm#7 #hokkaidopm
xtetsuji
0
17
PerlのTwitterモジュールの紹介
xtetsuji
0
18
文字化け2011〜まだまだ化けます〜
xtetsuji
0
15
mod_perl温故知新 〜Perl CGIの高速化からメールサーバまで〜
xtetsuji
0
13
Other Decks in Technology
See All in Technology
ガチな登山用デバイスからこんにちは
halka
1
200
Jaws-ug名古屋_LT資料_20250829
azoo2024
3
210
オブザーバビリティが広げる AIOps の世界 / The World of AIOps Expanded by Observability
aoto
PRO
0
250
ライブサービスゲームQAのパフォーマンス検証による品質改善の取り組み
gree_tech
PRO
0
420
シークレット管理だけじゃない!HashiCorp Vault でデータ暗号化をしよう / Beyond Secret Management! Let's Encrypt Data with HashiCorp Vault
nnstt1
2
130
実践AIガバナンス
asei
3
280
トヨタ生産方式(TPS)入門
recruitengineers
PRO
6
1.4k
JuniorからSeniorまで: DevOpsエンジニアの成長ロードマップ
yuriemori
2
350
ZOZOマッチのアーキテクチャと技術構成
zozotech
PRO
2
1.1k
AI エージェントとはそもそも何か? - 技術背景から Amazon Bedrock AgentCore での実装まで- / AI Agent Unicorn Day 2025
hariby
2
500
見てわかるテスト駆動開発
recruitengineers
PRO
6
2.4k
実運用で考える PGO
kworkdev
PRO
0
130
Featured
See All Featured
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
48
9.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
6.1k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
RailsConf 2023
tenderlove
30
1.2k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Docker and Python
trallard
45
3.5k
Product Roadmaps are Hard
iamctodd
PRO
54
11k
The Pragmatic Product Professional
lauravandoore
36
6.8k
How GitHub (no longer) Works
holman
315
140k
The World Runs on Bad Software
bkeepers
PRO
70
11k
Documentation Writing (for coders)
carmenintech
73
5k
Rebuilding a faster, lazier Slack
samanthasiow
83
9.1k
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/)
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠