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
14
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
31
モダンmod_perl入門 #yapcasia
xtetsuji
0
20
札幌でテンプレート #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
IAMのマニアックな話 2025を執筆して、 見えてきたAWSアカウント管理の現在
nrinetcom
PRO
4
620
讓測試不再 BB! 從 BDD 到 CI/CD, 不靠人力也能 MVP
line_developers_tw
PRO
0
270
JSX - 歴史を振り返り、⾯⽩がって、エモくなろう
pal4de
3
1k
「伝える」を加速させるCursor術
naomix
0
640
工具人的一生: 開發很多 AI 工具讓我 慵懶過一生
line_developers_tw
PRO
0
260
比起獨自升級 我更喜歡 DevOps 文化 <3
line_developers_tw
PRO
0
260
CIでのgolangci-lintの実行を約90%削減した話
kazukihayase
0
320
CSS、JSをHTMLテンプレートにまとめるフロントエンド戦略
d120145
0
150
Snowflake Intelligenceで実現できるノーコードAI活用
takumimukaiyama
1
270
"SaaS is Dead" は本当か!? 生成AI時代の医療 Vertical SaaS のリアル
kakehashi
PRO
3
240
ObsidianをMCP連携させてみる
ttnyt8701
2
130
Agentic DevOps時代の生存戦略
kkamegawa
0
600
Featured
See All Featured
Building an army of robots
kneath
306
45k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
6
690
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Bash Introduction
62gerente
614
210k
RailsConf 2023
tenderlove
30
1.1k
Building Applications with DynamoDB
mza
95
6.4k
Into the Great Unknown - MozCon
thekraken
39
1.8k
Scaling GitHub
holman
459
140k
Statistics for Hackers
jakevdp
799
220k
BBQ
matthewcrist
89
9.7k
Become a Pro
speakerdeck
PRO
28
5.4k
VelocityConf: Rendering Performance Case Studies
addyosmani
329
24k
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/)
͝ਗ਼ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠