セキュリティ・キャンプ全国大会 2020 オンラインの 講義 B7 「マクロな視点から捉える Web セキュリティ: Web インフラストラクチャを利用した攻撃とサイドチャネル攻撃の実践と評価」のスライドです。
発表者の情報: https://shift-js.info Twitter: https://twitter.com/lmt_swallow
ϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FCΠϯϑϥετϥΫνϟΛར༻ͨ͠߈ܸͱαΠυνϟωϧ߈ܸͷ࣮ફͱධՁ:0/&6$)* 5BLBTIJ [email protected]IUUQTTIJGUKTJOGP
View Slide
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟຊߨٛࢿྉʹ͍ͭͯ4QFBLFS%FDLެ։൛͚ͷิ ຊߨٛࢿྉʮηΩϡϦςΟɾΩϟϯϓશࠃେձΦϯϥΠϯʯͷϓϩμΫτηΩϡϦςΟτϥοΫ#ͷߨٛͰར༻͞ΕͨͷͰ͢ɻৄࡉIUUQTXXXJQBHPKQKJO[BJDBNQ[[email protected]@[email protected]
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟຊߨٛࢿྉʹ͍ͭͯ4QFBLFS%FDLެ։൛͚ͷิ ߨٛͷϚςϦΞϧҎԼͷ(JU)VC3FQPTJUPSZʹશͯ֨ೲͯ͋͠Γ·͢ɻIUUQTHJUIVCDPNMNUTXBMMPXTFDDBNQC
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟXIPBNJ4FFIUUQTTIJGUKTJOGP‣ :0/&6$)* 5BLBTIJถوࢤ‣ [email protected]‣ԿΛ͍ͯ͠Δਓʁ‣ ηΩϡϦςΟΤϯδχΞ!גࣜձࣾ'MBUU4FDVSJUZ‣ #!౦ژେֶཧֶ෦ใՊֶՊ‣ ηΩϡϦςΟɾΩϟϯϓͱͷؔੑʁ‣ தԝେձ8FCηΩϡϦςΟΫϥεଔۀ‣ ϛχΩϟϯϓJOԬࢁߨࢣ‣ શࠃେձߨࢣʢ#ʣ‣ Ҏ߱ηΩϡϦςΟɾΩϟϯϓڠٞձߨࢣҭ(ใ(
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟXIPBNJ׆ಈհ ‣ ػց͕ಈ͍͍ͯΔͷΛݟΔͷ͕͖Ͱ͢ɻ‣ ༡ͼͷҰͱͯ͠ɺʑंྠͷ࠶ൃ໌Λ͍ͯ͠·͢ɻ‣ ྫ-JOVY͕ಈ࡞͢Δ3*4$7$16Λࣗ࡞ͨ͠ $16࣮ݧ༨ڵIUUQTEJBSZTIJGUKTJOGPCVJMEJOHBSJTDWDQVGPSMJOVY
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟXIPBNJ׆ಈհ ‣ ಈ͍͍ͯΔػցͷηΩϡϦςΟΛߟ͑Δͷ͖Ͱ͢ɻ‣ ݸਓతͳ׆ಈͱͯ͠ɺ5IFPSFUJDBMͱ1SBDUJDBMͷؒʹҐஔ͢ΔΑ͏ͳ߈ܸख๏ͷݕ౼ɾௐࠪΛ͍ͯ͠·͢ɻ‣ ྫ"3PVHI*EFBPG#MJOE3FHVMBS&YQSFTTJPO*OKFDUJPO"UUBDLIUUQTEJBSZTIJGUKTJOGPCMJOESFHVMBSFYQSFTTJPOJOKFDUJPOimport reimport syssecret = "this_is_secret_value"r = input("Give a regexp to search: ")_ = timeout(re.match(r, secret), 5)print("Done :P")݅͑͞ἧ͑TFDSFUͷ༰͕ϦʔΫͰ͖Δʂ
͡Ίʹ1SFGBDF
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟຊߨٛͷత‣ 8FCΞϓϦέʔγϣϯͷηΩϡϦςΟΛɺैདྷΑΓେہతʹϨϏϡʔͰ͖ΔਓࡐΛ૿͢͜ͱɻ‣ 8FCΞϓϦέʔγϣϯͷҰߦҰߦΛηΩϡΞʹॻͨ͘Ίͷํ๏ɺ͍Θ8FCΞϓϦέʔγϣϯͷϛΫϩͳηΩϡϦςΟ؍ʹؔͯ͠ɺ͢Ͱʹଟ͘ͷॻ੶8FCαΠτͷจݙʹΑΓઆ໌͞Ε͍ͯ·͢ɻ‣ ຊߨٛͰɺ8FCΞϓϦέʔγϣϯΛ࣮Քಇʹ͍࣋ͬͯ͘ࡍʹ࣋ͨͳͯ͘ͳΒͳ͍ɺ8FCΞϓϦέʔγϣϯͷϚΫϩͳηΩϡϦςΟ؍ΛओʹऔΓѻ͍͖ͬͯ·͢ɻ‣ ࠷ઌͷ8FCηΩϡϦςΟྖҬʹڵຯΛֶ࣋ͬͨੜΛ૿͢͜ͱɻ‣ ͥͻͱҰॹʹ8FCηΩϡϦςΟʹ͍ͭͯߟ͍͖͑ͯ·͠ΐ͏ʂ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟͰɺߨٛ࣌ؒΆ͖ͬΓͳͷͰʜ‣ ߨٛI͔͋͠Γ·ͤΜ͔ΒɺԿ͔͓͑Ͱ͖ΔΘ͚Ͱ͋Γ·ͤΜ‣ ͔͠͠ɺ͜ͷݶΒΕͨ࣌ؒͷதͰɺҎԼΛఏڙͰ͖ͨΒͱࢥ͍ͬͯ·͢ɻ‣ ֶशͷΛங͘ػձ‣ ຊߨٛͰɺ͡Ίʹɺ8FCηΩϡϦςΟྖҬͷ֓؍ʹ͍ͭͯऔΓѻ͍·͢ɻ‣ ຊߨٛʹඞཁͳൣғͷࣝɺͰ͖Δ͚ͩTFMGDPOUBJOFEͳܗͰऔΓѻ͍·͢ɻ‣ 8FCηΩϡϦςΟྖҬͷֶशΛਐΊ͍ͯ͘ԼΛ࡞Γ·͠ΐ͏ɻ‣ ֶशͷࢦΛಘΔػձ‣ 0QUJPOBMͱ͍͏ه͕͋ΔԋशɺΑΓਂ͘ߨٛͷຊےΛֶͿͨΊͷͷͰ͢ɻ‣ "EWBODFEͱ͍͏ه͕͋Δԋशɺߨٛͷຊےͱඞͣؔ͠ͷͳ͍ɺൃలతͳΛֶͿͨΊͷͷͰ͢ɻ‣ ʮ͜͏͍͏ੈք͕͋ΔΜͩʯͱ͍͏ؾ͖ͮΛͨ͘͞ΜಘͯΒ͑Δͱخ͍͠Ͱ͢ɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟͦͷଞҙࣄ߲‣ ຊߨٛ߈ܸٕज़ʹؔ͢Δઆ໌ΛؚΜͰ͍·͢ɻ‣ ͜ͷΑ͏ͳઆ໌Λఏڙ͍ͯ͠Δͷɺडߨऀͷօ༷ʹݪཧϦεΫΛ͔ͬ͠Γͱཧղ͍ͯͨͩͨ͘͠ΊͰ͋Γɺ൜ࡑߦҝΛॿ͢ΔͨΊͰ͋Γ·ͤΜɻ‣ αΠόʔηΩϡϦςΟؔ࿈๏੍ٕज़ऀྙཧʹ͠ͳ͍ߦಈΛٻΊ·͢ɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ͓͠ͳ͕͖‣ $IBQUFS͍·ͷʮ8FCηΩϡϦςΟʯͱ‣ 8FCηΩϡϦςΟͳΔେͳྖҬͷதͷԿΛຊߨ͕ٛऔΓѻ͏ͷ͔Λ໌ྎʹ͠·͢ɻ‣ $IBQUFSҰ؏ੑΛอͪͳ͕Βͭͳ͛Δ‣ $IBQUFSͰಋೖ͢Δ؍ͷҰͭͰ͋ΔɺιϑτΣΞؒͷҰ؏ੑʢ$SPTTTPGUXBSF*ODPOTJTUFODZʣʹ͍ͭͯऔΓѻ͍·͢ɻ‣ $IBQUFSαΠυνϟωϧ߈ܸͷجૅ‣ $IBQUFSͰಋೖ͢Δ؍ͷҰͭͰ͋Δɺ8FCΞϓϦέʔγϣϯͷαΠυνϟωϧੑʹ͍ͭͯऔΓѻ͍·͢ɻ
͍·ͷʮ8FCηΩϡϦςΟʯͱ$IBQUFS
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ͍·ͷʮ8FCηΩϡϦςΟʯͱ‣ 8FCηΩϡϦςΟྖҬͷؔ৺Λཧ͍ͯͨ͘͠Ίʹɺݱঢ়ͷ8FCͷ֓؍ΛʢେࡶͰྑ͍ͷͰʣ௫ΜͰ͓͘ඞཁ͕͋Δɻ‣ ͦ͜Ͱɺ͔͜͜Βɺ͜ͷΑ͏ͳྲྀΕͰΛਐΊ͍ͯ͘ɻ‣ ·ͣ8FCશମΛ͘ݟ͢ʢ4FDUJPOʣɻ‣ ݟͨ͠ཁૉͷ͏ͪɺαʔόαΠυ8FCγεςϜʹ͋ͨΔ෦ͷߏཁૉΛɺຊߨٛͰඞཁͳൣғͰ֬ೝ͢Δʢ4FDUJPOd4FDUJPOʣɻ‣ ͦͷ্Ͱɺ8FCηΩϡϦςΟʹ͍ͭͯߟ͑Δʢ4FDUJPOʣɻ
8FCΛΈΘͨ͢$IBQUFS4FDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FCΛΈΘͨ͢‣ 8FCΞϓϦέʔγϣϯɺΫϥΠΞϯταΠυͷγεςϜʢFH8FCϒϥβʣͱαʔόαΠυͷγεςϜʢFH8FCαʔόΞϓϦέʔγϣϯαʔόʣ͕௨৴͠ɺڠௐಈ࡞͢Δ͜ͱʹΑΓΓཱ͍ͬͯΔɻαʔόαΠυ8FCγεςϜΫϥΠΞϯταΠυ8FCγεςϜ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ 8FCϒϥβ্Ͱଟ͘ͷ8FCϖʔδ͕ฒߦͯ͠ཧɾॲཧ͞Ε͍ͯΔɻ‣ ۙ4JOHMF1BHF"QQMJDBUJPOʢ41"ͱݺΕΔܗଶͷ8FCϖʔδ͕૿͑ɺ༷ʑͳϩδοΫ͕8FCϖʔδʹࡌΔΑ͏ʹͳ͖͍ͬͯͯΔɻΫϥΠΞϯταΠυ8FCγεςϜ8FCϒϥβ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ αʔόαΠυͷ8FCγεςϜαʔόαΠυ8FCΞϓϦέʔγϣϯͱɺϛυϧΣΞʢσʔλετΞϩʔυόϥϯαʣ͕͏·͘ڠௐಈ࡞͢Δ͜ͱʹΑΓ࣮ݱ͞Ε͍ͯΔɻαʔόαΠυ8FCγεςϜϛυϧΣΞ αʔόαΠυ8FCΞϓϦέʔγϣϯαʔόαΠυ8FCγεςϜ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟαʔόαΠυ8FCγεςϜ͏͢͜͠ϒϨΠΫμϯ͢ΔͲΜͳͷ͕͋Δʁˠ4FDUJPOͰ֬ೝϛυϧΣΞ αʔόαΠυ8FCΞϓϦέʔγϣϯͲΜͳ;͏ʹ࡞Δʁˠ4FDUJPOͰ֬ೝͲ͏ͬͯಈ͔͢ʁˠ4FDUJPOͰ֬ೝ
αʔόαΠυ8FCΞϓϦέʔγϣϯͷΞʔΩςΫνϟ$IBQUFS4FDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟయܕతͳΞʔΩςΫνϟ‣ αʔόαΠυ8FCΞϓϦέʔγϣϯͷయܕతͳΞʔΩςΫνϟ‣ .POPMJUIJD"SDIJUFDUVSF‣ ෳͷػೳΛେ͖ͳͭͷΞϓϦέʔγϣϯͱͯ͠ߏ͢ΔΞʔΩςΫνϟ‣ .JDSPTFSWJDFT"SDIJUFDUVSF‣ ۀػೳνʔϜΛ୯Ґͱͯ͠ಠཱͨ͠αʔϏεʢ.JDSPTFSWJDFʣΛ࡞ΓɺͦΕΒͷ૯ମͱͯ͠ΞϓϦέʔγϣϯΛߏ͢ΔΞʔΩςΫνϟ.POPMJUIJD"SDIJUFDUVSF .JDSPTFSWJDFT"SDIJUFDUVSF
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ ෳͷػೳ͕ͭͷΞϓϦέʔγϣϯʹ٧Ί͜·ΕΔΞʔΩςΫνϟͷ͜ͱɻ.POPMJUIJD"SDIJUFDUVSFػೳػೳػೳػೳ ػೳػೳαʔόαΠυ8FCΞϓϦέʔγϣϯ‣ ༷ʑͳཁૉ͔ΒͳΔ‣ ϓϨθϯςʔγϣϯ‣ ϏδωεϩδοΫ‣ σʔλετΞΛऔΓѻ͏‣ ʜ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ.POPMJUIJD"SDIJUFDUVSFߏͷΠϝʔδػೳػೳػೳػೳ ػೳػೳαʔόαΠυ8FCγεςϜαʔόαΠυ8FCΞϓϦέʔγϣϯϩʔυόϥϯασʔλετΞ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ ෳͷػೳ͕ͭͷΞϓϦέʔγϣϯʹ٧Ί͜·ΕΔΞʔΩςΫνϟͷ͜ͱɻ.POPMJUIJD"SDIJUFDUVSF՝ ػೳػೳػೳػೳ ػೳػೳαʔόαΠυ8FCΞϓϦέʔγϣϯ‣ ༷ʑͳཁૉ͔ΒͳΔ‣ ϓϨθϯςʔγϣϯ‣ ϏδωεϩδοΫ‣ σʔλετΞΛऔΓѻ͏‣ ʜίʔυϕʔε͕༰қʹංେԽͯ͠͠·͏
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ.POPMJUIJD"SDIJUFDUVSF՝ ػೳػೳػೳػೳ ػೳػೳαʔόαΠυ8FCγεςϜαʔόαΠυ8FCΞϓϦέʔγϣϯσʔλετΞϩʔυόϥϯαεέʔϧ͚ͤͨ͞ΕશମΛಈ࡞ͤ͞ͳ͍͚ͯ͘ͳ͍
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ.JDSPTFSWJDFT"SDIJUFDUVSF‣ ۀػೳνʔϜΛ୯Ґͱͯ͠ಠཱͨ͠αʔϏεʢ.JDSPTFSWJDFʣΛ࡞ΓɺͦΕΒͷ૯ମͱͯ͠ΞϓϦέʔγϣϯΛߏ͢Δɺͱ͍͏ΞʔΩςΫνϟͷ͜ͱɻ‣ Ͳ͏ׂʢ%FDPNQPTFʣ͢Δͷ͕࠷ద͔ॾઆ͋Δɻ.JDSPTFSWJDF .JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ.JDSPTFSWJDFT"SDIJUFDUVSF"1*(BUFXBZ1BUUFSOʹΑΔߏͷΠϝʔδαʔόαΠυ8FCγεςϜڞ༗σʔλετΞήʔτΣΠ.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ.JDSPTFSWJDFT"SDIJUFDUVSF‣ ۀػೳνʔϜΛ୯Ґͱͯ͠ಠཱͨ͠αʔϏεʢ.JDSPTFSWJDFʣΛ࡞ΓɺͦΕΒͷ૯ମͱͯ͠ΞϓϦέʔγϣϯΛߏ͢Δɺͱ͍͏ΞʔΩςΫνϟɻ‣ Ͳ͏ׂʢ%FDPNQPTFʣ͢Δͷ͕࠷ద͔ॾઆ͋Δɻ.JDSPTFSWJDF .JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDFίʔυϕʔε͕શମతʹૄ݁߹ʹͳΔ͜ͱ͕ظͰ͖Δ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ.JDSPTFSWJDFT"SDIJUFDUVSF‣ ۀػೳνʔϜΛ୯Ґͱͯ͠ಠཱͨ͠αʔϏεʢ.JDSPTFSWJDFʣΛ࡞ΓɺͦΕΒͷ૯ମͱͯ͠ΞϓϦέʔγϣϯΛߏ͢Δɺͱ͍͏ΞʔΩςΫνϟɻ‣ Ͳ͏ׂʢ%FDPNQPTFʣ͢Δͷ͕࠷ద͔ॾઆ͋Δɻ.JDSPTFSWJDF .JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDFখ͍͞୯ҐͷσϓϩΠ͕͘͢͠ͳΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ.JDSPTFSWJDFT"SDIJUFDUVSF"1*(BUFXBZ1BUUFSOʹΑΔߏͷΠϝʔδαʔόαΠυ8FCγεςϜڞ༗σʔλετΞήʔτΣΠ.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF͏·͘Ε.JDSPTFSWJDF୯ҐͰεέʔϧͤ͞ΒΕΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟۜͷؙͳ͍‣ .POPMJUIJD"SDIJUFDUVSFΑΓ.JDSPTFSWJDFT"SDIJUFDUVSFΛ࠾༻͢Δ߹ͷ΄͏͕ͭΒ͍͜ͱ͋Δɻ‣ τϥϯβΫγϣϯཧ‣ ͨ͘͞ΜͷΠϯλʔϑΣΠεఆٛ‣ αʔϏεؒͷґଘؔͷཧ‣ FUD‣ ؔ৺ͷʹΑΔޮԽͱɺͷͨΊͷੜ͡ΔΦʔόʔϔουͷͤΊ͍͕͗͋ൃੜ͢Δ͜ͱΛɺ࠾༻࣌ʹ೦಄ʹஔ͘ͱΑ͍͔͠Εͳ͍ɻ‣ 8FCͷจ຺Ͱͷ.POPMJUIJD"SDIJUFDUVSFWT.JDSPTFSWJDFT"SDIJUFDUVSFͱ͍͏ʹݶΒͣɺʮૄ݁߹ʯΛ࣮ݱ͠Α͏ͱ͢Δͱɺେମಉ͡Α͏ͳนʹͿ͔ͭΔʜ
αʔόαΠυ8FCγεςϜͷ࣮ߦڥ$IBQUFS4FDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ ࡞ͬͨΞϓϦέʔγϣϯɺಈ͔ͯ͠Α͏͘ʹཱͭɻ‣ ಈ͔ͨ͢Ίʹʜ‣ ಈ͔ͨ͢ΊͷʢҎ࣮߱ߦج൫ͱݺͿʣ͕ඞཁ‣ ϛυϧΣΞ͕ඞཁΞϓϦέʔγϣϯΛಈ͔ͨ͢ΊʹϛυϧΣΞ αʔόαΠυ8FCΞϓϦέʔγϣϯαʔόαΠυ8FCγεςϜ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ࣮ߦج൫Λ͔Β४උ͢ΔͷେมϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯؔ ؔ‣ αʔϏεΛӡ༻͢ΔͨΊʹϋʔυΣΞ͔Β༻ҙ͢Δ߹ʜ‣ ૿͢ͷʹݮΒ͢ͷʹʹؾ߹͕ඞཁʹͳΔɻ‣ ૿ͦ͏ʹߪೖʹ͕͔͔࣌ؒΔ‣ ݮΒͨ͢Ίʹదʹഇغ͢Δඞཁ͕͋Δ‣ ʮյΕ͏Δʯͱ͍͏ҙࣝΛڧ࣋ͨ͘ͶͳΒͳ͍ɻ‣ ؒҧͬͯػثʹίʔώʔΛ͜΅͢ͱյΕΔ‣ ಈ͔͠ଓ͚͍ͯΔ͚ͩͰյΕΔ‣ ͏·͍ͬͯ͘͘ʹेͳઐੑͱܦݧ͕ඞཁͰ͋Δɻ‣ ͭΒ͍˞Ϋϥυڥʹେنোͨ·ʹ͋ΔͷͰɺʮյΕΔʯ͜ͱΛҙࣝ͠ͳ͍͚ͯ͘ͳ͍ͷཧػثΛऔΓѻ͏߹ಛ༗ͷͭΒ͞ɺͱ͍͏Θ͚Ͱͳ͍͕ʜ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ࣮ߦج൫ͷԾԽɾநԽͷਐߦ‣ ʹͬͯΞϓϦέʔγϣϯͷ࣮ߦج൫ͷԾԽɾநԽ͕ਐΊΒΕ͖ͯͨɻ‣ *OGSBTUSVDUVSFBTB4FSWJDF *BB4‣ 1MBUGPSNBTB4FSWJDF 1BB4‣ $POUBJOFSBTB4FSWJDFʢ$BB4ʣ‣ 'VODUJPOBTB4FSWJDF 'BB4‣ ࠓͰඇৗʹखܰʹ࣮ߦج൫͕࡞ɾഁغͰ͖ΔΑ͏ʹͳ͍ͬͯΔɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ9BB4͕ఏڙ͢ΔൣғʢΠϝʔδʣϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ*BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ$BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ1BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ'BB4͕ఏڙ͢Δج൫ؔ ؔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ࣮ߦج൫ͷԾԽɾநԽͷਐߦϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ*BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ$BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ1BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ'BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ9BB4ఏڙଆ͕ཧͯ͘͠ΕΔˠخ͍͠ʂ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ࣮ߦج൫ͷԾԽɾநԽͷਐߦϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ*BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ$BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ1BB4͕ఏڙ͢Δج൫ؔ ؔϋʔυΣΞ04ϥϯλΠϜΞϓϦέʔγϣϯ'BB4͕ఏڙ͢Δج൫ؔ ͍ؔΖ͍Ζཧͯ͘͠ΕΔͷͰɺ͕ࣗऔΓѻ͏͖ϨΠϠ͚ͩʹؔ৺ΛڱΊΒΕΔˠخ͍͠ʂ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΠϯϑϥετϥΫνϟͷίʔυԽ‣ ԾԽɾநԽ͞ΕɺϋʔυΣΞͷΓ͘Γ͕Ӆṭ͞ΕͨΞϓϦέʔγϣϯ࣮ߦج൫ɺ΄΅७ਮͳιϑτΣΞͱಉʹऔΓѻ͑ΔΑ͏ʹɻ‣ ίϚϯυҰͭͰԾϚγϯΠϯελϯεΛ֬อͨ͠Γʜ‣ ίʔυʹΑΓΠϯϑϥετϥΫνϟͷߏΛهड़ɾཧͨ͠Γʜ‣ ॴҦ*OGSBTUSVDUVSFBT$PEFʢ*B$ʣ‣ ຊߨٛͷԋशڥ5FSSBGPSNͰߏ͕هड़ɾཧ͞Ε͍ͯΔɻresource "google_container_cluster""challenge_cluster" {name = "challenges"location = "asia-northeast1"initial_node_count = 1cluster_autoscaling {enabled = trueresource_limits {resource_type = "cpu"minimum = 3maximum = 32}resource_limits {resource_type = "memory"minimum = 3maximum = 32}}...
αʔόαΠυ8FCγεςϜͷϛυϧΣΞ$IBQUFS4FDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΞϓϦέʔγϣϯΛࢧ͑Δଘࡏ‣ ΞϓϦέʔγϣϯଟ͘ͷϛυϧΣΞʹࢧ͑ΒΕͯಈ࡞͢Δɻ‣ σʔλετΞʢ,743%#ʣ‣ ϩʔυόϥϯα‣ 8FC"QQMJDBUJPO'JSFXBMM‣ FUDϛυϧΣΞ αʔόαΠυ8FCΞϓϦέʔγϣϯαʔόαΠυ8FCγεςϜ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟϚωʔδυͳϛυϧΣΞ‣ ϚωʔδυͳܗͰఏڙ͞Ε͍ͯΔϛυϧΣΞͨ͘͞Μ͋Δɻ‣ σʔλετΞͷྫ‣ $MPVE42-"NB[PO3%4ͷΑ͏ͳ3%#‣ $MPVE%BUBTUPSF%ZOBNP%#ͷΑ͏ͳ,74‣ FUD‣ ηΩϡϦςΟؔ࿈ͷػೳΛऔΓѻͬͯ͘ΕΔϛυϧΣΞͷྫ‣ ΞΫηε੍ޚʹศརͳ$MPVE*EFOUJUZ"XBSF1SPYZ‣ "848"'ͷΑ͏ͳ8"'‣ FUD
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟʮΈ߹ΘͤΔ͜ͱͰ࡞Δʯ‣ ·ͱΊΔͱɺΞϓϦέʔγϣϯͷ࣮ߦج൫ϛυϧΣΞʜ‣ ϋʔυΣΞͷ੍͕ʢΫϥυϕϯμʹΑΓʣ͏·͘Ӆṭ͞ΕΔΑ͏ʹͳͬͨɻ‣ ༰қʹมߋऔࣺબ͕Ͱ͖ΔΑ͏ʹͳͬͨɻ‣ ΞϓϦέʔγϣϯ։ൃͱ͍ۙํ๏ͰߏͰ͖ΔΑ͏ʹͳͬͨɻ‣ ݁ՌɺʮΈ߹ΘͤΔ͜ͱͰ࡞ΔʯతΞϓϩʔν͕औΓ͘͢ͳͬͨɻ‣ ݱͷ8FCΞϓϦέʔγϣϯʹٻΊΒΕ͍ͯΔʮͨΓલ࣭ʯʢDGङϞσϧʣߴ͍ɻ‣ ྫෳࡶͳػೳཁ݅ ߴՄ༻ੑ ߴͳಈ࡞ ‣ શ෦͔Β࡞ΕΔͷ͔͍͍͕ͬ͜ɺߴ͍ʮͨΓલ࣭ʯΛୡ͢Δͷࠔɻ‣ ৴པͰ͖ΔͷΛΈ߹ΘͤΔ͜ͱͰɺϕʔεͷʮͨΓલ࣭ʯΛఈ্͛͠ͳ͕Βɺ͕࣮ࣗݱ͢Δ͖͜ͱʹྗ͢Δ͜ͱ͕Ͱ͖Δʢخ͍͠ʂʣ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟʮܗͰߟ͑ΔαʔόʔϨεઃܭʯIUUQTBXTBNB[PODPNKQTFSWFSMFTTQBUUFSOTTFSWFSMFTTQBUUFSO
8FCηΩϡϦςΟ$IBQUFS4FDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FCηΩϡϦςΟ‣ ٞͷൣғΛ໌֬ʹ͢ΔͨΊʹɺҎޙʮ8FCηΩϡϦςΟʯͱ͍͏ྖҬΛɺҎԼͷྖҬʹ͚ͯߟ͑Δɻ‣ ΫϥΠΞϯταΠυ8FCγεςϜͷηΩϡϦςΟ‣ αʔόαΠυ8FCγεςϜͷηΩϡϦςΟαʔόαΠυ8FCγεςϜΫϥΠΞϯταΠυ8FCγεςϜ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FCηΩϡϦςΟ‣ ٞͷൣғΛ໌֬ʹ͢ΔͨΊɺҎޙʮ8FCηΩϡϦςΟʯͱ͍͏ྖҬΛɺҎԼͷྖҬʹ͚ͯߟ͑Δɻ‣ ΫϥΠΞϯταΠυ8FCγεςϜͷηΩϡϦςΟ‣ αʔόαΠυ8FCγεςϜͷηΩϡϦςΟαʔόαΠυ8FCγεςϜΫϥΠΞϯταΠυ8FCγεςϜͪ͜ΒࠓͷߨٛͰׂѪ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FCηΩϡϦςΟ‣ ٞͷൣғΛ໌֬ʹ͢ΔͨΊɺҎޙʮ8FCηΩϡϦςΟʯͱ͍͏ྖҬΛɺҎԼͷྖҬʹ͚ͯߟ͑Δɻ‣ ΫϥΠΞϯταΠυ8FCγεςϜͷηΩϡϦςΟ‣ αʔόαΠυ8FCγεςϜͷηΩϡϦςΟαʔόαΠυ8FCγεςϜΫϥΠΞϯταΠυ8FCγεςϜͪ͜ΒΛηΩϡΞʹอͭʹͲ͏͢Εʁ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟαʔόαΠυ8FCγεςϜͷηΩϡϦςΟΞϓϦέʔγϣϯΞʔΩςΫνϟͷมԽΛ࠶ߟ͢ΔαʔόαΠυ8FCγεςϜڞ༗σʔλετΞήʔτΣΠ.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDFϙΠϯτͷࢄ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟαʔόαΠυ8FCγεςϜͷηΩϡϦςΟΞϓϦέʔγϣϯΞʔΩςΫνϟͷมԽΛ࠶ߟ͢ΔαʔόαΠυ8FCγεςϜڞ༗σʔλετΞήʔτΣΠ.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDF.JDSPTFSWJDFϙΠϯτ࿈ܞͷ૿Ճ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ ΞϓϦέʔγϣϯͷ࣮ߦج൫ϛυϧΣΞʜ‣ ϋʔυΣΞͷ੍͕ʢΫϥυϕϯμʹΑΓʣ͏·͘Ӆṭ͞ΕΔΑ͏ʹͳͬͨɻ‣ ༰қʹมߋऔࣺબ͕Ͱ͖ΔΑ͏ʹͳͬͨɻ‣ ΞϓϦέʔγϣϯ։ൃͱ͍ۙํ๏ͰߏͰ͖ΔΑ͏ʹͳͬͨɻ‣ ݁ՌɺʮΈ߹ΘͤΔ͜ͱͰ࡞ΔʯతΞϓϩʔν͕औΓ͘͢ͳͬͨʂ‣ ݱͷ8FCΞϓϦέʔγϣϯʹٻΊΒΕ͍ͯΔʮͨΓલ࣭ʯߴ͍ɻ‣ ྫෳࡶͳػೳཁ݅ ߴՄ༻ੑ ߴͳಈ࡞ ‣ ࢀߟङϞσϧ‣ શ෦͔Β࡞ΕΔͷ͔͍͍͕ͬ͜ɺߴ͍ʮͨΓલ࣭ʯΛୡ͢Δͷࠔɻ‣ ৴པͰ͖ΔͷΛΈ߹ΘͤΔ͜ͱͰɺϕʔεͷʮͨΓલ࣭ʯΛఈ্͛͠ͳ͕Βɺ͕࣮ࣗݱ͢Δ͖͜ͱʹྗ͢Δ͜ͱ͕Ͱ͖ΔɻαʔόαΠυ8FCγεςϜͷηΩϡϦςΟߏɾ࣮ߦڥͷมԽΛ࠶ߟ͢ΔϙΠϯτ࿈ܞͷ૿ՃϙΠϯτಈ࡞ج൫ͷଟ༷Խ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟαʔόαΠυ8FCγεςϜͷηΩϡϦςΟมԽ͔Β࠶ߟ͢Δ‣ αʔόαΠυ8FCγεςϜ͕ܴ͑ͨมԽ‣ ͷࢄʜݩདྷαʔόαΠυ8FCΞϓϦέʔγϣϯͷ࣮தͰըҰతʹऔΓѻΘΕ͍͕ͯͨɺࢄ͢ΔΑ͏ʹͳͬͨɻ‣ ࿈ܞͷ૿Ճʜͭͷૢ࡞ͷ࣮ݱͷͨΊʹɺෳͷιϑτΣΞ͕ؒ࿈ܞͯ͠ಈ͘͜ͱ͕૿͖͑ͯͨɻ‣ ಈ࡞ج൫ͷଟ༷ԽʜΞϓϦέʔγϣϯͷಈ࡞ج൫͕ɺ։ൃऀ͕༰қʹऔΓѻ͑ΔରͱมԽͨ͠ɻ‣ ͦ͜Ͱɺ͜ͷྖҬͷηΩϡϦςΟΛɺҎԼͷ؍ʹׂͯ͠ߟ͑ͯΈΑ͏ɻ‣ ηΩϡΞʹͭ͘Δ‣ ηΩϡΞʹͭͳ͛Δ‣ ηΩϡΞʹ͏͔͢͝
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟηΩϡΞʹͭ͘Δ‣ ·ͣίϯϙʔωϯτͷ֤ʑ͕ηΩϡΞʹ࡞ΒΕ͍ͯΔ͜ͱ͕ɺͯ͢ͷେલఏɻ‣ ·ͣʰମܥతʹֶͿ҆શͳ8FCΞϓϦέʔγϣϯͷ࡞Γํʱʢ௨শಙؙຊʣΛҰ௨Γಡ͏ɻ‣ 8FCʹ·ͭΘΔجૅతͳ੬ऑੑΛɺ͜ͷߨٛ࣌ؒͷதͰҰ௨ΓऔΓѻ͏ͷ͍͠ͷͰʜ‣ ຊߨٛͰۙΓ্͕͍ͬͯΔτϐοΫͱͯ͠ɺαΠυνϟωϧ߈ܸʹ͍ͭͯͷΈऔΓѻ͏ɻ.JDSPTFSWJDF ػೳ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟηΩϡΞʹͭͳ͛Δ‣ ࡞ͬͨίϯϙʔωϯτಉ࢜ηΩϡΞʹͭͳ͛ΒΕ͍ͯΔ͔Ͳ͏͔ɺͱ͍͏؍ඇৗʹॏཁʹͳ͖͍ͬͯͯΔɻ‣ ຊߨٛͰɺʮηΩϡΞʹͭͳ͛Δʯͱ͍͏ߦҝΛɺ͞ΒʹҎԼͷͭʹϒϨΠΫμϯͯ͠ߟ͍͑ͯ͘ɻ‣ ηΩϡΞͳܦ࿏Ͱͭͳ͛Δ‣ Ұ؏ੑΛอͪͳ͕Βͭͳ͛Δ.JDSPTFSWJDF.JDSPTFSWJDFϛυϧΣΞ ΞϓϦέʔγϣϯ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟηΩϡΞʹͭͳ͛ΔηΩϡΞͳܦ࿏Ͱͭͳ͛Δ‣ αʔϏεؒͷ௨৴ΛͲ͏ηΩϡΞʹߦ͏͔ɺඇৗʹॏཁͳ؍ɻ‣ αʔϏεؒͷ௨৴ܦ࿏ʹ౪ௌɾվ͟ΜΛૂ͏߈ܸऀ͕͍Δ͔ʜ‣ ͭͷίϯϙʔωϯτ͕৵͞ΕΔ͜ͱͰɺࢥΘ͵ͱ͜Ζ͔Β௨৴͕ߦͳΘΕΔ͔͠Εͳ͍ʜ‣ ຊߨٛͰऔΓѻΘͳ͍͕ɺ༷ʑͳϓϨΠϠʔ͕ؤு͍ͬͯΔͷͰɺ͍͔͚ͯΈΔͱָ͍͔͠͠Εͳ͍ɻ‣ ྫ*TUJPͳͲͷ4FSWJDF.FTIϓϩμΫτͳͲ‣ ͍ΘΏΔθϩτϥετϞσϧ͕ࠜఈʹ͋Δ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ ͭͷγεςϜͷ࣮ݱʹؔΘΔʜ‣ ༷͕૿͑Δ΄ͲɺͦΕΒͷ༷ؒͷҰ؏ੑ͕ʹͳΔ͜ͱ૿͑Δɻ‣ ιϑτΣΞ͕૿͑Δ΄ͲɺͦΕΒͷ࣮ؒͷҰ؏ੑ͕ʹͳΔ͜ͱ૿͑Δɻ‣ ຊߨٛͰɺʢ8FCʹؔ࿈ͨ͠ʣҰ؏ੑͷ͕ܽট͘ͷྫͷ͏ͪɺҎԼΛऔΓ্͛Δɻ‣ )5513FRVFTU4NVHHMJOH‣ Ωϟογϡʹؔ࿈ͨ͠߈ܸ‣ ϨεϙϯεϘσΟͷੜʹؔΘΔॲཧܥͷ༷ࠩΛར༻ͨ͠߈ܸηΩϡΞʹͭͳ͛ΔҰ؏ੑΛอͪͳ͕Βͭͳ͛Δ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟηΩϡΞʹ͏͔͢͝‣ ಈ࡞ج൫ΛηΩϡΞʹอͭ͜ͱɺͦͷಈ࡞ج൫ಛ༗ͷηΩϡϦςΟϦεΫΛѲͭͭ͠ΞϓϦέʔγϣϯΛ։ൃ͢Δɺͱ͍͏ͷͭͷେࣄͳ؍ɻ‣ ࣌ؒͷ߹্औΓѻ͑ͳ͍͕ɺۙ͜ͷτϐοΫʹֶ͍ͭͯͿͨΊͷϚςϦΞϧ͕ͲΜͲΜ૿͖͍͑ͯͯΔͷͰɺֶͼ͘͢ͳ͖͍ͬͯͯΔɻ‣ /*4541ͷΑ͏ͳΨΠυϥΠϯ‣ #VTUB,VCFͷΑ͏ͳϋϯζΦϯϚςϦΞϧ‣ IUUQTDPOUBJOFSTFDVSJUZEFWͷΑ͏ͳจݙ‣ FUD
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟখ·ͱΊ͍·ͷʮ8FCηΩϡϦςΟʯͱαʔόαΠυ8FCγεςϜΫϥΠΞϯταΠυ8FCγεςϜ‣ ٞͷൣғΛ໌֬ʹ͢ΔͨΊʹɺҎޙʮ8FCηΩϡϦςΟʯͱ͍͏ྖҬΛɺҎԼͷྖҬʹ͚ͯߟ͑Δɻ‣ ΫϥΠΞϯταΠυ8FCγεςϜͷηΩϡϦςΟ‣ αʔόαΠυ8FCγεςϜͷηΩϡϦςΟ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟখ·ͱΊ͍·ͷʮ8FCηΩϡϦςΟʯͱαʔόαΠυ8FCγεςϜΫϥΠΞϯταΠυ8FCγεςϜ‣ ͜ͷηΩϡϦςΟΛҎԼͷ̏؍͔Βߟ͑Α͏‣ ηΩϡΞʹͭ͘Δ‣ ηΩϡΞʹͭͳ͛Δ‣ ηΩϡΞʹ͏͔͢͝
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟখ·ͱΊ͍·ͷʮ8FCηΩϡϦςΟʯͱαʔόαΠυ8FCγεςϜΫϥΠΞϯταΠυ8FCγεςϜ‣ ͜ͷηΩϡϦςΟΛҎԼͷ̏؍͔Βߟ͑Α͏‣ ηΩϡΞʹͭ͘Δ‣ ηΩϡΞʹͭͳ͛Δ‣ ηΩϡΞʹ͏͔͢͝ηΩϡΞͳܦ࿏Ͱͭͳ͛ΔҰ؏ੑΛอͬͯͭͳ͛Δ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟখ·ͱΊ͍·ͷʮ8FCηΩϡϦςΟʯͱαʔόαΠυ8FCγεςϜΫϥΠΞϯταΠυ8FCγεςϜ;‣ ͪ͜ΒΛֶͿͨΊͷૉࡐݱࡏ४උதʜ‣ ϦϦʔεͰ͖ͨΒ5XJUUFSͰҊ͠·͢ɻ‣ [email protected]
Ұ؏ੑΛอͪͳ͕Βͭͳ͛Δ$IBQUFS
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ ͭͷγεςϜͷ࣮ݱʹؔΘΔʜ‣ ༷͕૿͑Δ΄ͲɺͦΕΒͷ༷ؒͷҰ؏ੑ͕ʹͳΔ͜ͱ૿͑Δɻ‣ ιϑτΣΞ͕૿͑Δ΄ͲɺͦΕΒͷ࣮ؒͷҰ؏ੑ͕ʹͳΔ͜ͱ૿͑Δɻ‣ ͔͜͜Βɺʢ8FCʹؔ࿈ͨ͠ʣҰ؏ੑͷ͕ܽট͘ͷྫͷ͏ͪɺҎԼΛऔΓ্͛Δɻ‣ )5513FRVFTU4NVHHMJOH‣ Ωϟογϡʹؔ࿈ͨ͠߈ܸ‣ ϨεϙϯεϘσΟͷੜʹؔΘΔॲཧܥͷ༷ࠩΛར༻ͨ͠߈ܸҰ؏ੑΛอͪͳ͕Βͭͳ͛Δ
)5513FRVFTU4NVHHMJOH$IBQUFS4FDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ)551ͱ5$1ίωΫγϣϯ‣ )551d)551ͷ௨৴5$1ίωΫγϣϯͷ্ͰߦͳΘΕΔɻ‣ ˞)55126*$ͱ͍͏6%1্ͷτϥϯεϙʔτϓϩτίϧ͕ผ్༻͍ΒΕΔ‣ )551ͰಛผͳϔομΛར༻͠ͳ͍ݶΓɺճϦΫΤετɾϨεϙϯεͷૹड৴Λ͢Δͨͼʹ5$1ίωΫγϣϯΛੜɾഁغ͍ͯͨ͠ɻ‣ ͜Ε8FCϖʔδͷେ͖ͳύϑΥʔϚϯεωοΫʹͳΔɻ‣ ͍͍ͪͪXBZ)BOETIBLF͕ඞཁͳΘ͚ͳͷͰʜΫϥΠΞϯτ 8FCαʔόͭͷ5$1ίωΫγϣϯ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ5$1ίωΫγϣϯͷ࠶ར༻‣ )551ʜConnection: Keep-AliveϔομΛɺίωΫγϣϯͷ࠶ར༻Λࢦࣔ͢ΔͨΊʹར༻Ͱ͖Δɻ‣ )551ʜ͡Ί͔ΒConnection: closeϔομʹΑΓίωΫγϣϯͷऴ͕ྃ໌ࣔ͞Εͳ͍ݶΓɺίωΫγϣϯ͕࠶ར༻͞ΕΔɻ‣ )551ʜͭͷίωΫγϣϯʹετϦʔϜͱ͍͏Ծతͳํ௨৴࿏͕ෳઃ͚ΒΕɺ)551ΑΓߋʹߴͳܗͰίωΫγϣϯ͕࠶ར༻͞ΕΔɻΫϥΠΞϯτ 8FCαʔόͭͷ5$1ίωΫγϣϯ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟίωΫγϣϯ͕࠶ར༻͞Ε͍ͯΔ༷ࢠԋशʢ0QUJPOBMʣ,FFQ"MJWFͷڍಈΛ֬ೝ͢Δ8JSFTIBSLͰݟͯΈΑ͏
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ$POUFOU-FOHUI5SBOTGFS&ODPEJOH‣ ιέοτதΛྲྀΕΔσʔλͷ͏ͪɺͲ͔͜ΒɾͲ͜·Ͱ͕ϦΫΤετ PSϨεϙϯε͔Λࣔͨ͢ΊʹɺҎԼͷΑ͏ͳϔομ͕༻͍ΒΕΔɻ‣ $POUFOU-FOHUIϔομ‣ 5SBOTGFS&ODPEJOHϔομΫϥΠΞϯτ 8FCαʔό
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ$POUFOU-FOHUI‣ $POUFOU-FOHUIϔομʜϦΫΤετʢPSϨεϙϯεʣͷૹ৴࣌ʹɺϦΫΤετϘσΟ PSϨεϙϯεϘσΟͷαΠζΛ͑ΔͨΊͷϔομ‣ ϦΫΤετ PSϨεϙϯε͕ѹॖ͞Ε͍ͯΔ߹ѹॖޙͷαΠζ͕ࢦఆ͞ΕΔ‣ ਐͰදه͞ΕΔPOST / HTTP/1.1Host: example.comContent-Length: 8test\r\naaϘσΟͷ͞ͷࢦఆόΠτͷϘσΟ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ 5SBOTGFS&ODPEJOHϔομ‣ ϦΫΤετ PSϨεϙϯεͷసૹํࣜΛද͢ϔομ‣ DIVOLFEEFqBUFɺ͍͔ͭ͘ͷσΟϨΫςΟϒ͕ଘࡏ͢Δ‣ DIVOLFEσΟϨΫςΟϒ͕ࢦఆ͞Εͨ߹‣ (16 ਐͰදه͞ΕͨνϟϯΫͷαΠζ)\r\n(࣮ࡍͷσʔλ)\r\nΛͭͷνϟϯΫͱͯ͠ɺίωΫγϣϯ্ʹਵ࣌νϟϯΫ͕ૹ৴͞Ε͍ͯ͘‣ αΠζͷνϟϯΫ͕ϦΫΤετ PSϨεϙϯεͷऴΛҙຯ͢Δ5SBOTGFS&ODPEJOHPOST / HTTP/1.1Host: example.comTransfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nసૹʹDIVOLFEํࣜΛར༻͢Δ͜ͱͷએݴνϟϯΫ νϟϯΫ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ3'$ʹΑΔͱʜ‣ *GBNFTTBHFJTSFDFJWFEXJUICPUIB5SBOTGFS&ODPEJOHBOEB$POUFOU-FOHUIIFBEFSpFME UIF5SBOTGFS&ODPEJOHPWFSSJEFTUIF$POUFOU-FOHUI IUUQTUPPMTJFUGPSHIUNMSGDTFDUJPOΑΓҾ༻‣ ͭ·Γɺ$POUFOU-FOHUIϔομͱ5SBOTGFS&ODPEJOHϔομ͕ͱʹࢦఆ͞Εͨ߹ɺ$POUFOU-FOHUIϔομ͕ແࢹ͞ΕΔ͖Ͱ͋ΔɻPOST / HTTP/1.1Host: example.comContent-Length: 18Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nແࢹ͞ΕΔར༻͞ΕΔνϟϯΫྻͱͯ͠ղऍ͞ΕΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ3'$ʹΑΔͱʜ‣ *GBNFTTBHFJTSFDFJWFEXJUIPVU5SBOTGFS&ODPEJOHBOEXJUIFJUIFSNVMUJQMF$POUFOU-FOHUIIFBEFSpFMETIBWJOHEJ⒎FSJOHpFMEWBMVFTPSBTJOHMF$POUFOU-FOHUIIFBEFSpFMEIBWJOHBOJOWBMJEWBMVF UIFOUIFNFTTBHFGSBNJOHJTJOWBMJEBOEUIFSFDJQJFOU.645USFBUJUBTBOVOSFDPWFSBCMFFSSPS*GUIJTJTBSFRVFTUNFTTBHF UIFTFSWFS.645SFTQPOEXJUIB #BE3FRVFTUTUBUVTDPEFBOEUIFODMPTFUIFDPOOFDUJPO IUUQTUPPMTJFUGPSHIUNMSGDTFDUJPOΑΓҾ༻‣ ͭ·ΓɺϦΫΤετதʹͷҟͳΔ$POUFOU-FOHUIϔομ͕ෳ͋Δͱ͖ɺ#BE3FRVFTU͕ฦ٫͞ΕΔ͖ɻPOST / HTTP/1.1Host: example.comContent-Length: 18Content-Length: 30͕ҟͳΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟͰɺ࣮ࡍͷιϑτΣΞͷڍಈʜ‣ ࣮ࡍͷιϑτΣΞͷ࣮ͷதʹ3'$ͱҟͳΔڍಈΛऔΔͷ͕͋ͬͨɻ‣ ༷ʑͳιϑτΣΞʹ$7&͕༩͞Ε͍ͯΔɻ‣ ͦͦ3'$ʹ४ڌ͍ͯ͠ͳ͔ͬͨύλʔϯɺ४ڌ͠Α͏ͱ͍ͯͨ͠ͷͷɺ;ͱͨ͠σʔλͷਖ਼نԽͷʹ3'$४ڌͰͳ͘ͳ͍ͬͯͨύλʔϯ͋ΔɻTransfer-Encoding:[\x0b]chunkedTransfer-Encoding : xchunked)"1SPYZͰ͑ͨ߈ܸϕΫλ(PͷOFUIUUQͰ͑ͨ߈ܸϕΫλ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ‣ ΫϥΠΞϯτ͔Β࣮ࡍͷ8FCΞϓϦέʔγϣϯʹ౸ୡ͢Δ·Ͱͷؒʹɺ-PBE#BMBODFSͷ)551௨৴Λதܧ͢ΔΑ͏ͳαʔό͕͠͠ஔ͔ΕΔɻ‣ Ҏ߱Ͱศ্ٓʜ‣ ࣮ࡍͷ8FCΞϓϦέʔγϣϯαʔόΛʮόοΫΤϯυαʔόʯͱݺͿ‣ ͦͷલͰ)551௨৴Λதܧ͢ΔΑ͏ͳαʔόΛʮϑϩϯτΤϯυαʔόʯͱݺͿ‣ ˞͜ͷลͷݺͼํIUUQTQPSUTXJHHFSOFUSFTFBSDIIUUQEFTZODBUUBDLTSFRVFTUTNVHHMJOHSFCPSO͔ΒआΓͨͷ)551௨৴ͷ࿈ΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔό
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ)5513FRVFTU4NVHHMJOHʢ)34‣ )5513FRVFTU4NVHHMJOHʢ)34ʣʜ͋ΔϦΫΤετͷॲཧʹؔ༩͢Δɺ,FFQ"MJWFͳίωΫγϣϯʹΑΓଓ͞Εͨ)551Λղऍ͢ΔιϑτΣΞʢPSϋʔυΣΞʣ͕ͨͪɺҰ؏ੑͳ͘)551ϦΫΤετͷऴΛղऍ͢Δ߹ʹߦ͑Δɺ͜ͷղऍࠩΛར༻ͨ͠߈ܸͷ͜ͱɻ‣ ݹ͘ͷ8BUDIpSFͷ8IJUFQBQFSͳͲͰใࠂ͞Ε͍ͯΔɻࢀߟ8IJUFQBQFSIUUQTXXXDHJTFDVSJUZDPNMJC)5513FRVFTU4NVHHMJOHQEG‣ ͷ1PSU4XJHHFSͷൃදʹΑΓվΊͯΛूΊΔΑ͏ʹͳͬͨɻࢀߟ1PSU4XJHHFSʹΑΔهࣄIUUQTQPSUTXJHHFSOFUSFTFBSDIIUUQEFTZODBUUBDLTSFRVFTUTNVHHMJOHSFCPSO‣ !SFHJMFSPʹΑΔ༷ʑͳใࠂษڧʹͳΔɻࢀߟ%&'$0/ͰͷൃදIUUQTXXXZPVUVCFDPNXBUDI WE76J1T.1:
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$- ঢ়گઃఆΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔό5SBOTGFS&ODPEJOHΛ༏ઌ͢ΔͱԾఆ$POUFOU-FOHUIΛ༏ઌ͢ΔͱԾఆͭͷίωΫγϣϯ͕࠶ར༻͞ΕΔͱԾఆ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$- ΫϥΠΞϯτଆ͔ΒᐆດͳϦΫΤετ͕ૹ৴͞Εͨͱ͢ΔΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόPOST / HTTP/1.1Host: example.comContent-Length: 3Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\n‣ ·ͣࠨͷྫͷΑ͏ͳϦΫΤετ͕ൃߦ͞Εͨͱ͢Δɻ‣ ͜ͷϦΫΤετҎԼͷϔομΛ྆ํؚΜͰ͍Δɻ‣ $POUFOU-FOHUIϔομ‣ 5SBOTGFS&ODPEJOHϔομ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$- ϑϩϯτΤϯυαʔό͕5SBOTGFS&ODPEJOHϔομΛ༏ઌͨ͠ͱ͢ΔͱʜPOST / HTTP/1.1Host: example.comContent-Length: 3Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔό‣ ϑϩϯτΤϯυαʔό͕ԾఆͲ͓Γ5SBOTGFS&ODPEJOHϔομΛ༏ઌͨ͠ͱ͢Δͱɺ͜ͷϦΫΤετϘσΟͷ͕ͯ͢όοΫΤϯυαʔόʹ͚ͯૹ৴͞ΕΔɻ‣ ͜Ε3'$௨ΓͷڍಈͰ͋Δɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$- ίωΫγϣϯதʹͭͷϦΫΤετ͕ૹ৴͞ΕΔPOST / HTTP/1.1Host: example.comContent-Length:3Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nόοΫΤϯυαʔόʹૹ৴͞ΕΔσʔλΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔό
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$- όοΫΤϯυαʔό͕$POUFOU-FOHUIϔομΛ༏ઌͨ͠ͱ͢ΔͱʜPOST / HTTP/1.1Host: example.comContent-Length:3Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nόοΫΤϯυαʔό͕ॲཧ͢ΔൣғΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόॲཧ͞ΕͣʹΔൣғόοΫΤϯυαʔόɺPOST ~a\r\n·Ͱͷൣғ͕ϦΫΤετͩͱࢥͬͯॲཧ͢ΔҎ߱ॲཧ͞ΕͣʹɺίωΫγϣϯதʹΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5& ΫϥΠΞϯτଆ͔ΒผͷϦΫΤετ͕ૹ৴͞Εͨͱ͢ΔΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόGET / HTTP/1.1Host: example.com‣ Ұํɺઌड़ͷϦΫΤετͷޙʹɺࠨͷྫͷΑ͏ͳʢͳΜͷมͳ͍ʣϦΫΤετ͕ૹ৴͞Εͨͱ͢Δɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$- ίωΫγϣϯதʹͭͷϦΫΤετ͕ૹ৴͞ΕΔPOST / HTTP/1.1Host: example.comContent-Length:3Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nGET / HTTP/1.1...όοΫΤϯυαʔό͕͢Ͱʹॲཧͨ͠ൣғΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόॲཧ͞Ε͍ͯͳ͍ൣғ৽͘͠ૹ৴͞ΕͨൣғޙଓͷϦΫΤετ͕ϑϩϯτΤϯυαʔό͔Βૹ৴͞ΕΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$- ͭͷϦΫΤετ͕ॲཧ͞ΕΔPOST / HTTP/1.1Host: example.comContent-Length:3Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nGET / HTTP/1.1...όοΫΤϯυαʔό͕͢Ͱʹॲཧͨ͠ൣғΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόόοΫΤϯυαʔό͕ଓ͍ͯॲཧ͢ΔൣғόοΫΤϯυαʔόͬͨ෦͔ΒॲཧΛ࢝ΊΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$-͜͜·ͰͰԿ͕ى͔ͬͨ͜POST / HTTP/1.1Host: example.comContent-Length: 3Transfer-Encoding: chunkeda\r\nΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόPOST / HTTP/1.1Host: example.comContent-Length: 3Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nGET / HTTP/1.1...0123456789\r\n0\r\nGET / HTTP/1.1...ϑϩϯτΤϯυαʔό͕தܧͨ͠ϦΫΤετ όοΫΤϯυαʔό͕ॲཧͨ͠ϦΫΤετʺ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ5&$-͜͜·ͰͰԿ͕ى͔ͬͨ͜POST / HTTP/1.1Host: example.comContent-Length: 3Transfer-Encoding: chunkeda\r\nΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόPOST / HTTP/1.1Host: example.comContent-Length: 3Transfer-Encoding: chunkeda\r\n0123456789\r\n0\r\nGET / HTTP/1.1...0123456789\r\n0\r\nGET / HTTP/1.1...ϑϩϯτΤϯυαʔό͕தܧͨ͠ϦΫΤετ όοΫΤϯυαʔό͕ॲཧͨ͠ϦΫΤετʺ߈ܸऀޙଓͷϦΫΤετͷઌ಄ʹҙͷόΠτྻΛՃͰ͖Δʂ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5& ঢ়گઃఆΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔό$POUFOU-FOHUIΛ༏ઌ͢ΔͱԾఆ5SBOTGFS&ODPEJOHΛ༏ઌ͢ΔͱԾఆͭͷίωΫγϣϯ͕࠶ར༻͞ΕΔͱԾఆ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5& ΫϥΠΞϯτଆ͔ΒᐆດͳϦΫΤετ͕ૹ৴͞Εͨͱ͢ΔΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόPOST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nPREFIX‣ ·ͣࠨͷྫͷΑ͏ͳϦΫΤετ͕ൃߦ͞Εͨͱ͢Δɻ‣ ͜ͷϦΫΤετҎԼͷϔομΛ྆ํؚΜͰ͍Δɻ‣ $POUFOU-FOHUIϔομ‣ 5SBOTGFS&ODPEJOHϔομ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5& ϑϩϯτΤϯυαʔό͕$POUFOU-FOHUIϔομΛ༏ઌͨ͠ͱ͢ΔͱʜPOST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nPREFIXΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔό‣ ϑϩϯτΤϯυαʔό͕ԾఆͲ͓Γ$POUFOU-FOHUIϔομΛ༏ઌͨ͠ͱ͢Δͱɺ͜ͷϦΫΤετϘσΟͷ͕ͯ͢όοΫΤϯυαʔόʹ͚ͯૹ৴͞ΕΔɻ‣ $POUFOU-FOHUIΛ༏ઌ͢Δͷ3'$ҧ͕ͩɺݱ࣮ੈքͷΞϓϦέʔγϣϯͰྫ͕͍͔ͭ͘ใࠂ͞Ε͍ͯΔʢޙड़ʣɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5& ίωΫγϣϯதʹͭͷϦΫΤετ͕ૹ৴͞ΕΔPOST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nPREFIXΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόόοΫΤϯυαʔόʹૹ৴͞ΕΔσʔλ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5& όοΫΤϯυαʔό͕5SBOTGFS&ODPEJOHϔομΛ༏ઌͨ͠ͱ͢ΔͱʜPOST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nPREFIXΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόόοΫΤϯυαʔό͕ॲཧ͢Δൣғॲཧ͞ΕͣʹΔൣғόοΫΤϯυαʔόɺPOST ~0\r\n·Ͱͷൣғ͕ϦΫΤετͩͱࢥͬͯॲཧ͢ΔҎ߱ॲཧ͞ΕͣʹɺίωΫγϣϯதʹΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5& ίωΫγϣϯதʹͭͷϦΫΤετ͕ૹ৴͞ΕΔPOST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nPREFIXGET / HTTP/1.1...ΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόόοΫΤϯυαʔό͕͢Ͱʹॲཧͨ͠ൣғॲཧ͞Ε͍ͯͳ͍ൣғ৽͘͠ૹ৴͞ΕͨൣғޙଓͷϦΫΤετ͕ϑϩϯτΤϯυαʔό͔Βૹ৴͞ΕΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5& ͭͷϦΫΤετ͕ॲཧ͞ΕΔPOST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nPREFIXGET / HTTP/1.1...ΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόόοΫΤϯυαʔό͕͢Ͱʹॲཧͨ͠ൣғόοΫΤϯυαʔό͕ଓ͍ͯॲཧ͢ΔൣғόοΫΤϯυαʔόͬͨ෦͔ΒॲཧΛ࢝ΊΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5&͜͜·ͰͰԿ͕ى͔ͬͨ͜POST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόPOST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nPREFIXGET / HTTP/1.1...PREFIXGET / HTTP/1.1...ϑϩϯτΤϯυαʔό͕தܧͨ͠ϦΫΤετ όοΫΤϯυαʔό͕ॲཧͨ͠ϦΫΤετʺ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷͳ͍ղऍ͕ى͜Δͱ͖ͷ$-5&͜͜·ͰͰԿ͕ى͔ͬͨ͜POST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nΫϥΠΞϯτϑϩϯτΤϯυαʔόόοΫΤϯυαʔόPOST / HTTP/1.1Host: example.comContent-Length: 9Transfer-Encoding: chunked0\r\nPREFIXGET / HTTP/1.1...PREFIXGET / HTTP/1.1...ϑϩϯτΤϯυαʔό͕தܧͨ͠ϦΫΤετ όοΫΤϯυαʔό͕ॲཧͨ͠ϦΫΤετ߈ܸऀࠓճޙଓͷϦΫΤετͷઌ಄ʹҙͷόΠτྻΛՃͰ͖Δʂ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ)34߈ܸͷར༻ઌ‣ )34੬ऑੑʹΑΓɺҎԼͷΑ͏ͳૢ࡞͕ՄೳʹͳΔͷͰʜ‣ ޙଓͷϦΫΤετͷϦΫΤετϥΠϯͷ੍ޚɾϔομͷՃ‣ ޙଓͷϦΫΤετͷϘσΟͷมߋ‣ વɺҎԼͷΑ͏ͳ߈ܸʹར༻Ͱ͖Δɻ‣ ޙଓͷϦΫΤετͷ%P4‣ ࣗ༝ͷߴ͍ϦΫΤετͷൃߦ‣ 8FC$BDIF1PJTPOJOHͷΩϟογϡʹؔ࿈ͨ͠߈ܸʢޙड़ʣ‣ ·ͨɺ8FCΞϓϦέʔγϣϯݻ༗ͷػೳΛͬͨ߈ܸʹར༻Ͱ͖Δɻ‣ ϦιʔεΛߘɾӾཡͰ͖ΔΑ͏ͳػೳ͕͋Δ8FCΞϓϦέʔγϣϯʢFHܝࣔ൘ʣʹ͓͍ͯɺଞऀͷϦΫΤετ༰ΛϦʔΫͰ͖Δ߹͕͋Δɻ‣ 944੬ऑੑ͕͋Δ߹ɺͦΕΛ᠘ϖʔδʹ༠ಋ͢ΔͳͲͷૢ࡞ͳ͠ʹɺผͷϢʔβͷϒϥβ্ͰൃՐͤ͞ΒΕΔ߹͕͋Δɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ)34߈ܸͷରࡦ‣ )34ɺ͋ΔϦΫΤετͷॲཧʹؔ༩͢Δɺ,FFQ"MJWFͳίωΫγϣϯʹΑΓଓ͞Εͨ)551Λղऍ͢ΔιϑτΣΞʢPSϋʔυΣΞʣ͕ͨͪɺҰ؏ੑͳ͘)551ϦΫΤετͷऴΛղऍ͢Δ߹ʹߦ͑Δɺ͜ͷղऍࠩΛར༻ͨ͠߈ܸͷ͜ͱɺͩͬͨͷͰɺରࡦʜ‣ ํϑϩϯτΤϯυαʔόͱόοΫΤϯυؒͷ,FFQ"MJWFͳίωΫγϣϯΛࣺͯΔ‣ ຖճίωΫγϣϯΛுΓ͢Α͏ʹ͢Δ‣ )551Λར༻͢Δ‣ ํ)551ϦΫΤετͷऴͷղऍͷҰ؏ੑΛอͭ‣ ར༻͢ΔιϑτΣΞΛ࠷৽ʹอͭ‣ ϦΫΤετΛ࠷ΫϥΠΞϯτʹ͍ۙҐஔͰਖ਼نԽͯ͠͠·͏‣ )551ϦΫΤετͷॲཧʹؔ༩͢ΔιϑτΣΞΛ౷Ұ͢Δʢ͜Εඇݱ࣮తʣ
Ωϟογϡʹؔ࿈ͨ͠߈ܸ$IBQUFS4FDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FCʹ͓͚ΔΩϟογϡ‣ Ωϟογϡ˺औಘͨ͠ϦιʔεΛɺΑΓߴʹΞΫηεͰ͖ΔҐஔʹҰ࣌తʹอଘ͠ɺͦͷޙͦΕΛར༻͢Δ͜ͱͰɺॲཧͷߴԽɾෛՙͷݮΛਤΔΈɻ‣ 8FCʹ͓͚ΔΩϟογϡʜ‣ 8FCϒϥβͰߦͳΘΕΔɻ‣ ΩϟογϡαʔόͷϛυϧΣΞͰߦͳΘΕΔɻ‣ ʢαʔόαΠυʣ8FCΞϓϦέʔγϣϯ͕࠷దԽͷͨΊʹߦ͏߹͋ΔɻΫϥΠΞϯτΩϟογϡαʔόΦϦδϯαʔό
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡͷڍಈΩϟογϡϛε࣌ ΫϥΠΞϯτΩϟογϡαʔόΦϦδϯαʔόཁٻϦιʔε͕·ͩΩϟογϡ͞Ε͍ͯͳ͍߹ʜΩϟογϡ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡͷڍಈΩϟογϡϛε࣌ ΫϥΠΞϯτΩϟογϡαʔόΦϦδϯαʔόόοΫΤϯυαʔό͔Β֘ϦιʔεΛऔಘɾอଘͯ͠ʜΩϟογϡ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡͷڍಈΩϟογϡϛε࣌ ̏ΫϥΠΞϯτΩϟογϡαʔόΦϦδϯαʔόऔಘ͖ͯͨ͠ϦιʔεΛฦ٫͢ΔΩϟογϡ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡͷڍಈΩϟογϡώοτ࣌ ΫϥΠΞϯτΩϟογϡαʔόΦϦδϯαʔόཁٻϦιʔε͕طʹΩϟογϡ͞Ε͍ͯΔ߹ʜΩϟογϡ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡͷڍಈΩϟογϡώοτ࣌ ΫϥΠΞϯτΩϟογϡαʔόΦϦδϯαʔόΩϟογϡࡁΈϦιʔεΛฦ٫͢ΔΩϟογϡ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ$POUFOU%FMJWFSZ/FUXPSLʢ$%/ʣ‣ $%/ੈքதͷଓʢ1P1ʣʹΩϟογϡαʔό͕ஔ͞ΕͨωοτϫʔΫ‣ ίϯςϯπΛ৴͢ΔΦϦδϯαʔόͷϦιʔε͕֤ΩϟογϡαʔόͰอ͞ΕΔɻ‣ ΤϯυϢʔβͷ͔ۙ͘ΒΩϟογϡΛ৴͢Δ͜ͱͰɺΑΓߴͳମݧ͕ఏڙͰ͖Δɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡʹؔ͢Δجຊతͳ‣ ͳΜͰ͔ΜͰΩϟογϡ͢Ε͍͍ɺͱ͍͏Θ͚Ͱͳ͍ɻ‣ Ωϟογϡͷର༗ޮظݶʮ͍͍ײ͡ʯʹཧͯ͠Δඞཁ͕͋Δɻ‣ ී௨ΩϟογϡαʔόೝূɾೝՄͷΑ͏ͳߴͳػೳΛ࣋ͨͳ͍ͷͰɺຊདྷΞΫηεʹೝূɾೝՄΛཁ͢ΔΑ͏ͳϦιʔε͕Ωϟογϡ͞Εͯ͠·͏ͱɺେ͖ͳใྲྀग़ʹͭͳ͕ΔՄೳੑ͕͋ΔɻΫϥΠΞϯτΩϟογϡαʔόΦϦδϯαʔόΩϟογϡϢʔβݸผͷϦιʔε
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡͷ੍ޚ‣ ઌ߲ͷΑ͏ͳࣄ͔Β͞ΕΔΑ͏ʹɺΩϟογϡ੍ޚͰ͖Δɻ‣ ओʹ੍ޚ͍ͨ͜͠ͱʜ‣ ԿΛΩϟογϡ͢Δ͔‣ Ωϟογϡ͢ΔͳΒɺ͍ͭ·ͰΩϟογϡ͢Δ͔‣ ੍ޚʹओʹҎԼ͕ར༻͞ΕΔɻ‣ $BDIF$POUSPMϔομ‣ &YQJSFTϔομ‣ Ωϟογϡαʔό$%/αʔϏεݻ༗ͷػೳ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ$BDIF$POUSPMϔομ‣ ˞ຊདྷϦΫΤετɾϨεϙϯεͷ྆ํͷ੍ޚʹ͑Δϔομ͕ͩɺҎ߱ͰϨεϙϯεதͷ$BDIF$POUSPMϔομʹ͍ͭͯͷΈߟ͑Δɻ‣ $BDIF$POUSPMϨεϙϯεϔομɺҎԼͷΑ͏ͳσΟϨΫςΟϒΛࣔ͢͜ͱͰɺͦͷϦιʔεΛΩϟογϡ͢ΔଆͷڍಈΛ੍ޚ͢ΔͨΊʹ༻͍ΒΕΔɻ‣ NBYBHFTNBYBHFʜఴ͑ΒΕͨύϥϝʔλͱͱʹɺ༗ޮظݶʢඵʣΛࣔ͢‣ OPDBDIFʜΦϦδϯαʔόͷ֬ೝͳ͠Ωϟογϡ͕࠶ར༻͞ΕͯͳΒͳ͍͜ͱΛࣔ͢‣ OPTUPSFʜΩϟογϡ͞ΕͯͳΒͳ͍͜ͱΛࣔ͢‣ QVCMJDQSJWBUFʜϦιʔε͕ಛఆͷݸਓ͚Ͱ͋ΔͰͳ͍͜ͱΛࣔ͢‣ FUDCache-Control: directive, directive, ...
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ&YQJSFTϔομ‣ &YQJSFTϔομͷɺͦͷϦιʔεͷΩϟογϡͷ༗ޮظݶΛࣔ͢ɻ‣ ྫ8FE 0DU(.5‣ $BDIF$POUSPMϔομʹTNBYBHFNBYBHFσΟϨΫςΟϒ͕ࢦఆ͞Ε͍ͯΔ߹ɺͦͪΒ͕༏ઌ͞Εɺ&YQJSFTϔομແࢹ͞ΕΔɻ‣ ࢀߟ3'$IUUQTIUUQXHPSHTQFDTSGDIUNMIFBEFSFYQJSFTExpires: HTTP-date
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟݻ༗ͷػೳʹΑΔ੍ޚ‣ Ωϟογϡαʔό$%/αʔϏεɺΩϟογϡ੍ޚͷͨΊͷಛผͳΈΛఏڙ͍ͯ͠Δ߹͕͋Δɻ‣ ͦͷΑ͏ͳΈͷྫ‣ 7BSOJTI'BTUMZͰ7$-ͱ͍͏%4-ͰΩϟογϡػߏΛ੍ޚͰ͖Δɻ‣ $MPVEqBSFͷΩϟογϡ1BHF3VMFͱ͍͏ϧʔϧʹΑΓ੍ޚͰ͖Δɻ‣ "LBNBJʹ͓͍ͯཧը໘͔ΒΩϟογϡରظݶΛ੍ޚͰ͖Δɻ‣ FUDsub vcl_recv {if (req.url !~ "^/static") {return(pass);}}63-͕TUBUJD͔Β࢝·Βͳ͍߹Ωϟογϡର֎ʹ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡͷઃఆམͱ͕݀͠ଟ͍Ωϟογϡαʔό$%/αʔϏεݻ༗ͷඇࣗ໌ͳڍಈ͕͋ΔIUUQTEPDTGBTUMZDPNKBHVJEFTDPOpHVSJOHDBDIJOH'BTUMZOPTUPSFͰΩϟογϡ͢Δ ͡Ί͔Β&YQJSF͍ͯ͠ΔΑ͏ͳϨεϙϯε͕࠶ར༻͞Ε͏ΔʢDG3FRVFTU$PMMBQTJOHʣ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡͷઃఆམͱ͕݀͠ଟ͍$BDIF$POUSPMͰͷઃఆΛݻ༗ػೳ͕ΦʔόʔϥΠυ͠͏Δ‣ Ωϟογϡαʔό$%/αʔϏεݻ༗ͷػೳͰΩϟογϡର༗ޮظݶΛࢦఆ͢Δͱɺ͜Ε͕$BDIF$POUSPMϔομͷઃఆΑΓ༏ઌ͞ΕΔ߹͕͋Δɻ‣ ༏ઌ͞ΕΔ͔͞Εͳ͍͔αʔϏεґଘͳͷͰɺߟ͑Δ͜ͱ͕ଟ͍ɻ‣ ·ͨɺޙʹհ͢Δ8FC$BDIF%FDFQUJPOͷҰॿʹͳ͍ͬͯΔɻIUUQTMFBSOBLBNBJDPNFOVTXFCIFMQJPOPDB(6*%%%'#'%"#&#%$%&IUNM
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΩϟογϡΛ༻͍ͨඇࣗ໌ͳ߈ܸ‣ ͜͜·ͰΩϟογϡઃఆʹؔ͢Δɺҙਤͤ͵ϛεͷͩͬͨɻ‣ ҰํɺΩϟογϡػೳΛҙਤతʹར༻͢Δ߈ܸଘࡏ͍ͯ͠Δɻ‣ 8FC$BDIF1PJTPOJOH‣ ͯ͠ѱҙͷ͋ΔσʔλΛΩϟογϡͤ͞ɺͦΕΛଞऀʹ৴͢Δ߈ܸ‣ $BDIF1PJTPOJOH%FOJBMPG4FSWJDFʢ$1%P4ʣ‣ ͯ͠ΤϥʔϖʔδΛΩϟογϡͤ͞Δ͜ͱʹΑΓαʔϏεͷ%P4Λى͜͢߈ܸ‣ 8FC$BDIF%FDFQUJPOʢ8$%ʣ‣ ຊདྷΩϟογϡ͞Εͳ͍͖Ͱ͋ΔϢʔβͷσʔλΛͯ͠Ωϟογϡͤ͞ɺͦΕΛ౪ΈݟΔ߈ܸ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FC$BDIF1PJTPOJOH‣ 8FC$BDIF1PJTPOJOHʜѱҙͷ͋ΔίϯςϯπΛʢͳΜͱ͔ͯ͠ʣΩϟογϡαʔόʹΩϟογϡͤ͞ɺͦΕΛଞऀʹ৴͢Δɺͱ͍͏߈ܸɻ‣ +BWB4DSJQUΛೖͨ͠ϖʔδΛ৴͢Δ͜ͱͰ944߈ܸ͕Ͱ͖Δ‣ ʢ߹ʹΑͬͯʣϚϧΣΞͷαʔόʹར༻Ͱ͖Δɻ߈ܸऀΩϟογϡαʔόΦϦδϯαʔό߈ܸϦΫΤετΛૹ৴߈ܸऀʹΑΓૢ࡞͞Εͨίϯςϯπ͕ฦ٫͞ΕΔ߈ܸऀʹΑΓૢ࡞͞Εͨίϯςϯπ͕Ωϟογϡ͞ΕΔ߈ܸରͷϢʔβ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FC$BDIF1PJTPOJOH‣ 8FC$BDIF1PJTPOJOHʜѱҙͷ͋ΔίϯςϯπΛʢͳΜͱ͔ͯ͠ʣΩϟογϡαʔόʹΩϟογϡͤ͞ɺͦΕΛଞऀʹ৴͢Δɺͱ͍͏߈ܸɻ‣ +BWB4DSJQUΛೖͨ͠ϖʔδΛ৴͢Δ͜ͱͰ944߈ܸ͕Ͱ͖Δ‣ ʢ߹ʹΑͬͯʣϚϧΣΞͷαʔόʹར༻Ͱ͖Δɻ߈ܸऀΩϟογϡαʔόΦϦδϯαʔό߈ܸରͷϢʔβ߈ܸϦΫΤετΛૹ৴߈ܸऀʹΑΓૢ࡞͞Εͨίϯςϯπ͕ฦ٫͞ΕΔ߈ܸऀʹΑΓૢ࡞͞Εͨίϯςϯπ͕Ωϟογϡ͞ΕΔ߈ܸऀͱಉ͡ϦιʔεΛཁٻ߈ܸऀʹΑΓૢ࡞͞Εͨίϯςϯπ͕ฦ٫͞ΕΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FC$BDIF1PJTPOJOH‣ ѱҙͷ͋Δίϯςϯπͷૠೖʁ‣ ΩϟογϡʹΩʔʢ˺ΩϟογϡΛอॴ͔Β୳͢ͱ͖ʹΘΕΔใʣ͕͋Δɻ‣ 3FqFDUFE944੬ऑੑϒϥβ͔Βൃߦ͞ΕΔϦΫΤετ͕ىͱͳΔͨΊɺ੍͕ݫ͍͕͠ɺ߈ܸऀࣗͷखݩ͔ΒͰ͋Εɺࣗ༝ʹϦΫΤετ͕ૹ৴Ͱ͖Δɻ‣ Ωϟογϡ͞ΕΔϖʔδͷϦΫΤετΛߦ͍ɺΩϟογϡΩʔͰͳ͍෦ʹΑΓ3FqFDUFE944੬ऑੑɺ߹ͷྑ͍ϦΫΤετͷมԽ͕Ҿ͖ىͤ͜ΕɺΩϟογϡܦ༝ͰଞऀΛ߈ܸͰ͖Δ͜ͱʹͳΔʂ‣ ࢀߟจݙ‣ 1SBDUJDBM8FC$BDIF1PJTPOJOHIUUQTQPSUTXJHHFSOFUSFTFBSDIQSBDUJDBMXFCDBDIFQPJTPOJOH‣ 8FC$BDIF&OUBOHMFNFOU/PWFM1BUIXBZTUP1PJTPOJOHIUUQTQPSUTXJHHFSOFUSFTFBSDIXFCDBDIFFOUBOHMFNFOU
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ$BDIF1PJTPOFE%FOJBMPG4FSWJDFʢ$1%P4ʣ‣ ΩϟογϡͷΩʔҎ֎ͷ෦Λௐ͢Δ͜ͱͰΤϥʔϖʔδΛදࣔͤ͞Δ͜ͱ͕Ͱ͖ɺ͔ͭΩϟογϡαʔό͕ͦΕΛΩϟογϡ͢Δͱ͖ɺͦΕΛ௨ͯ͠8FCϖʔδͷදࣔʢ%P4ʣ͕Ͱ͖ͯ͠·͏ɺͱ͍͏ͷ͜ͱɻIUUQTDQEPTPSH
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FC$BDIF%FDFQUJPO߈ܸྫͷঢ়گઃఆ߈ܸରͷϢʔβΩϟογϡαʔόΦϦδϯαʔόNZQBHFͱNZQBHFGPPDTT͕ಉ͘͡ϚΠϖʔδΛฦ͢ͱԾఆ͢Δύε͕DTTͷܗΛ͍ͯ͠ΔϦιʔεΛແ༻ͰΩϟογϡ͢ΔͱԾఆ͢Δ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FC$BDIF%FDFQUJPO߈ܸରͷϢʔβΛ༠ಋ͢Δ߈ܸରͷϢʔβ߈ܸऀͲ͏Β͜ͷ8FCϖʔδʹඒຯ͍͓ͦ͠ͷใ͕͋ΔΒ͍ͧ͠ʂ͍͍ͩͶɻݟͯΈΑ͏ʜ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FC$BDIF%FDFQUJPO߈ܸରͷϢʔβ͔ΒΈͨϦιʔεΛΩϟογϡͤ͞Δ߈ܸରͷϢʔβΩϟογϡαʔόΦϦδϯαʔό༠ಋ͞ΕͯNZQBHFGPPDTTʹΞΫηε Ωϟογϡ͕ͳ͍ͷͰΦϦδϯαʔόʹ͍߹ΘͤNZQBHFGPPDTTʢதNZQBHFʣΛฦ٫DTTܗࣜͷϦιʔεͳͷͰԾఆ௨ΓΩϟογϡ͢ΔϨεϙϯε͕ಧ͘߈ܸऀ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FC$BDIF%FDFQUJPOΩϟογϡͤͨ͞ϦιʔεΛϦʔΫ͢Δ߈ܸରͷϢʔβΩϟογϡαʔόΦϦδϯαʔό༠ಋ͞ΕͯNZQBHFGPPDTTʹΞΫηε Ωϟογϡ͕ͳ͍ͷͰΦϦδϯαʔόʹ͍߹ΘͤNZQBHFGPPDTTʢதNZQBHFʣΛฦ٫DTTܗࣜͷϦιʔεͳͷͰԾఆ௨ΓΩϟογϡ͢ΔϨεϙϯε͕ಧ͘߈ܸऀNZQBHFGPPDTTʹΞΫηεΩϟογϡ͔Βɺ߈ܸରͷϢʔβ͔ΒݟͨNZQBHFGPPDTTNZQBHFͷத͕ฦΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FC$BDIF%FDFQUJPO‣ 8FC$BDIF%FDFQUJPOʢ8$%ʣ߈ܸ‣ ͋Δਓ1͕ΞΫηεͰ͖ΔϦιʔε3͕͋Δͱ͢Δɻ‣ ·ͨɺ3Λࢦ͢63-Ͱ͋ͬͯɺ͔ͭΩϟογϡαʔό͕ΩϟογϡΛͯ͠͠·͏Α͏ͳ63-͕ଘࡏ͢Δ߹Λߟ͑Δɻ‣ ͜ͷͱ͖ɺਓ1Λɺͦͷ63-ʹ༠ಋ͢Δ͜ͱͰɺ3͕Ωϟογϡ͞ΕΔɻ‣ ߈ܸऀޙ͔Βͦͷ63-ʹΞΫηε͢Δ͜ͱͰɺຊདྷ߈ܸऀ͕3ʹΞΫηεͰ͖ͳ͍߹Ͱ͋ͬͯɺΩϟογϡ͞Εͨ3ΛಘΔ͜ͱ͕Ͱ͖ͯ͠·͏ɻ‣ ࢀߟจݙ‣ 8FC$BDIF%FDFQUJPO"UUBDLʢ(JM ʣIUUQTXXXCMBDLIBUDPNEPDTVTXFEOFTEBZVT(JM8FC$BDIF%FDFQUJPO"UUBDLXQQEG‣ $BDIFEBOE$POGVTFE8FC$BDIF%FDFQUJPOJOUIF8JMEʢ.JSIFJEBSJFUBMʣIUUQTXXXVTFOJYPSHDPOGFSFODFVTFOJYTFDVSJUZQSFTFOUBUJPONJSIFJEBSJ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟҰ؏ੑͷ୲อ͍͠BOZUJNFZPVIBWFPVUPGCBOEQPMJDZBQQMJFESBUIFSUIBOIBWJOHUIFQPMJDZBDUVBMMZDPOUBJOFEJOUIFSFTQPOTFJUTFMG UIFSF`TBDIBODFGPSJUUPCFPVUPGTZOD DBVTJOHNJTDPOpHVSBUJPOBOEQPUFOUJBMWVMOFSBCJMJUJFT[email protected]
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ͜ΕΒͷΛආ͚ΔͨΊʹ‣ ΦϦδϯαʔό͔Β$BDIF$POUSPMϔομΛదʹૹग़͠Α͏ɻ‣ దʹOPTUPSFͷσΟϨΫςΟϒΛૹग़͠Α͏ɻ‣ Կ͕ద͔ঢ়گʹΑΔͷͰʢSFDBQ'BTUMZOPTUPSFΛແࢹ͢Δʣɺదٓ3'$Ωϟογϡαʔό$%/αʔϏεͷ༷ΛಡΈɺ͔֬ΊΔඞཁ͕͋Δɻ‣ ͪΖΜɺΩϟογϡͯ͠Α͍ͷੵۃతʹΩϟογϡ͍͖ͯ͘͠ɻ‣ Ωϟογϡαʔό$%/αʔϏεͱΦϦδϯαʔόͷҰ؏ੑΛอͱ͏ɻ‣ $BDIF$POUSPMϔομͰͷઃఆͱɺιϑτΣΞɾαʔϏεݻ༗ͷઃఆ͕৯͍ҧ͏Α͏ͳ໘ΛɺͰ͖Δ͚ͩ࡞Βͳ͍͜ͱ͕େͰ͋Δɻ‣ ಛʹ1BUI$POGVTJPOʹҙ͢Δඞཁ͕͋Δɻ
ϨεϙϯεϘσΟͷੜʹؔΘΔॲཧܥͷ༷ࠩΛར༻ͨ͠߈ܸ$IBQUFS4FDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟϨεϙϯεϘσΟͷੜ‣ ϨεϙϯεϘσΟ༷ʑͳܗͰੜ͞ΕΔ{% for item in items %}{{ item.name }}{{ item.description }}{% endfor %}ϧʔϓͷ։࢝ϧʔϓͷऴྃมͷల։+JOKBςϯϓϨʔτ$q = $_GET['q'];echo htmlspecialchars($q, ENT_QUOTES, 'UTF-8');?>1)1εΫϦϓτ(&5ύϥϝʔλΛΤεέʔϓͯ͠ग़ྗ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟςϯϓϨʔτΤϯδϯͷࠞ༻‣ ςϯϓϨʔτΤϯδϯ͠͠ݻ༗ͷه๏Λ࣋ͭɻ‣ ςϯϓϨʔτΤϯδϯ͕ෳ༻͍ΒΕΔ߹ɺͦΕΒͷؒͷه๏ࠩʹΑΓɺΑ͖ͤ͵੬ऑੑ͕ੜ·Εͯ͠·͏߹͕͋Δɻ‣ ৄ͘͠ԋशΛࢀরͷ͜ͱɻ‣ αʔόαΠυͰͷ)5.-ੜͱΫϥΠΞϯταΠυͰͷʢͳΜΒ͔ͷςϯϓϨʔτݴޠΛ༻͍ͨʣ)5.-ੜ͕ࠞ༻͞ΕΔέʔε͕දతɻ8FCϒϥβ 8FCΞϓϦέʔγϣϯ{{ ... }}มల։༻ͷه๏ͩͱࢥ͍ͬͯΔ{{ ... }}ͨͩͷจࣈྻͩͱࢥ͍ͬͯΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ&EHF4JEF*ODMVEFTʢ&4*ʣ‣ &EHF4JEF*ODMVEFTʢ&4*ʣʜ9.-ϕʔεͷϚʔΫΞοϓݴޠ‣ ͷλάʹΑΓɺҎԼ͕දݱͰ͖Δɻ‣ αϒϦιʔεͷಈతͳऔಘɾల։‣ ؆୯ͳมૢ࡞‣ 7BSOJTI 'BTUMZ ͷ༷ʑͳιϑτΣΞ͕&4*ͷॲཧʹରԠ͍ͯ͠ΔɻFoobar&4*ॲཧܥ͕͜ͷ෦Λల։͢Δ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ&EHF4JEF*ODMVEFT*OKFDUJPO‣ &4**OKFDUJPOʜ&4*λάΛʢ944߈ܸͱಉ͡ཁྖͰʣόοΫΤϯυαʔό͔ΒͷϨεϙϯεʹೖ͢Δ͜ͱͰɺ్தͷ&4*ॲཧܥΛૢ࡞͢Δ߈ܸɻ‣ 443'߈ܸ)5510OMZϑϥά͕༩͞Εͨ$PPLJFͷϦʔΫʹར༻Ͱ͖ΔɻΫϥΠΞϯτ&4*Λղऍ͢ΔϑϩϯτΤϯυαʔόόοΫΤϯυαʔό Ṗͷλάͩͱࢥ͍ͬͯΔ &4*λάͩͱࢥ͍ͬͯΔ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟରࡦ)5.-ੜॲཧͷ༷ࠩΛར༻ͨ͠߈ܸ‣ )5.-ͷੜॲཧ͋ΒΏΔ໘ͰߦͳΘΕΔɻ‣ ͦΕΒॲཧܥͷؒʹ༷͕ࠩ͋Δ߹͕͋Δɻ‣ ಛघͳҙຯΛ࣋ͭจࣈͷछྨ‣ ॲཧܥ͕࣋ͭػೳ‣ )5.-ͷੜʹࢀՃ͢Δॲཧܥಉ࢜ʜ‣ લఏͱͯ͠ɺͰ͖Δ͚ͩݮΒ͓ͯ͘͠ͱΑ͍ɻ‣ &4*ͳͲɺΘͳͯ͘ࡁΉͷͰ͋ΕɺແޮԽ͓ͯ͘͠ɻ‣ Ͳ͏ͯ͠ෳΛͭͳ͛Δඞཁ͕͋Δ߹ʹɺ༷ࠩΛ͏·͘Ϋογϣϯͯ͠ɺҰ؏ੑΛ࣋ͨͤͯΔඞཁ͕͋Δɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟখ·ͱΊҰ؏ੑΛอͪͳ͕Βͭͳ͛Δ‣ ҎԼͷͭͷ߈ܸྫɺͲΕιϑτΣΞؒͷҰ؏ੑͷͳ͕͞ট͍ͨͰ͋Δͱଊ͑Δ͜ͱ͕Ͱ͖Δɻ‣ )5513FRVFTU4NVHHMJOH‣ $POUFOU-FOHUI5SBOTGFS&ODPEJOHϔομͷෆదͳऔΓѻ͍ʹΑΓൃੜ͢ΔɺதܧαʔόͱΞϓϦέʔγϣϯαʔόؒͷෆ߹Λ༻͍ͨ߈ܸ‣ $BDIFʹؔ࿈ͨ͠߈ܸ‣ 8FC$BDIF1PJTPOJOH 8FC$BDIF%FDFQUJPO $1%P4ͳͲ‣ ϨεϙϯεϘσΟͷੜʹؔΘΔॲཧܥͷ༷ࠩΛར༻ͨ͠߈ܸ‣ 443$43ͷෆదͳࠞ༻&4**OKFDUJPO߈ܸͳͲ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟখ·ͱΊҰ؏ੑΛอͪͳ͕Βͭͳ͛Δ‣ 8FCΞϓϦέʔγϣϯͷߏஙʹඞཁͳίϯϙʔωϯτ͕૿͖͑ͯͨࠓɺͦΕΒΛҰ؏ੑΛอͪͳ͕Βͭͳ͛Δͱ͍͏ͷɺඇৗʹେͳ؍Ͱ͋Δɻ‣ ྫ͑ɺҎԼͷΑ͏ͳ߹ʹ͕ൃੜͯ͠͠·͏ɻ‣ ༷ͷؒʹҰ؏ੑ͕ͳ͍ͷʹɺͦΕͷࠩΛΫογϣϯͤͣʹͭͳ͛ͯ͠·ͬͨͱ͖‣ ࣮ͷؒʹҰ؏ੑ͕ͳ͍ͷʹɺͦΕʹؾ͕͔ͣʹͭͳ͛ͯ͠·ͬͨͱ͖‣ ֤ίϯϙʔωϯτΛઃܭ͢Δɾͭ͘Δଆͷਓʹ͕͋ΔΘ͚Ͱ͋Δͷ͕ͩʜ‣ 8FCΞϓϦέʔγϣϯ։ൃऀͱͯ͠ɺҎԼͷʹཹҙ͠Α͏ɻ‣ ࣗͷ͓͏ͱ͍ͯ͠Δίϯϙʔωϯτ܈ʹɺʹͳΓͦ͏ͳʮࠩʯ͕ͳ͍͔ɻ‣ ࣗͷ༻͢Δίϯϙʔωϯτͷ࣮ʹطͷ͕ͳ͍͔‣ ηΩϡϦςΟٕज़ऀͱͯ͠ɺͦ͏͍͏Λૣظʹൃݟͯ͠ɺੈͷத͔ΒηΩϡΞͰͳ͍ͷΛݮΒ͍͚ͯ͠ΔͱΑ͍
αΠυνϟωϧ߈ܸͷجૅ$IBQUFS
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟαΠυνϟωϧ߈ܸ‣ αΠυνϟωϧ‣ ॲཧͷ݁Ռൃੜͨ͠ʮ෭࣍తͳӨڹͷ͋ΒΘΕʯ͕؍ଌͰ͖Δܦ࿏ͷ͜ͱɻ‣ ʮ෭࣍తͳӨڹͷ͋ΒΘΕʯͷྫ‣ ॲཧͷফඅిྗͷมԽ‣ ॲཧͷ࣮ߦ࣌ؒͷಛੑ‣ αΠυνϟωϧ߈ܸʜ͋Δॲཧʹର͢ΔαΠυνϟωϧΛ؍ଌ͢Δ͜ͱͰɺͦͷॲཧʹؔΘΔใΛϦʔΫ͢Δ߈ܸͷ͜ͱɻೖྗ ग़ྗॲཧ෭࣍తͳӨڹͷ͋ΒΘΕ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FCʹ͓͚ΔαΠυνϟωϧ߈ܸ‣ 8FCʹ͓͍ͯαΠυνϟωϧ߈ܸͷํ๏͕Β͘ݕ౼͞Ε͖͍ͯͯΔɻ‣ ࢀߟ'FMUFOBOE4DIOFJEFS ͷ$BDIFCBTFEUJNJOHBUUBDLTIUUQTEMBDNPSHEPJ‣ 8FCʹ͓͚ΔαΠυνϟωϧ߈ܸΛɺ࣍ͷ؍Ͱྨͯ͠ߟ͑Δ‣ αʔόαΠυͷαΠυνϟωϧΛ༻͍ͨ߈ܸ‣ 8FCϒϥβͷαΠυνϟωϧΛ༻͍ͨ߈ܸ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟαʔόαΠυͷαΠυνϟωϧΛ༻͍ͨ߈ܸ‣ Θ͔Γ͍͢ྫαʔόαΠυϩδοΫͷλΠϛϯά߈ܸ‣ ʢೖྗ γεςϜͷ෦ঢ়ଶʣʹԠͯ͡ɺॲཧʹཁ͢Δ࣌ؒมԽ͢Δɻ‣ ͏·͘ೖྗΛมԽͤ͞Δͱɺॲཧ࣌ؒΛ؍ଌ͢Δ͜ͱͰɺγεςϜͷ෦ঢ়ଶΛਪଌ͢Δ͜ͱ͕Ͱ͖Δ߹͕͋Δɻ‣ ֶज़ྖҬͰ#PSU[BOE#POFI ͕Α͘Ҿ͖߹͍ʹग़͞ΕΔIUUQTEMBDNPSHEPJೖྗ ॲཧ ग़ྗ͜͜ʹ͔͔Δ࣌ؒΛ؍ଌ͢Δ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟΦϥΫϧʹ͢Δ‣ αΠυνϟωϧ͠͠ΦϥΫϧͱͯ͠ѻ͏͜ͱ͕Ͱ͖Δ‣ ΦϥΫϧʜ͍Λ͛ΔͱɺͦΕʹ͑ͯ͘ΕΔͷ‣ தͰͲΜͳ͜ͱ͕ߦͳΘΕΔ͔͕ɺΛ͛Δଆʹ։ࣔ͞Ε͍ͯΔඞཁͳ͍‣ ಛʹ8FCʹ͓͚ΔαΠυνϟωϧ߈ܸͷྖҬͰɺड़ޠ1Λ͛ΔͱɺൿີͷใEʹରͯ͠1 E͕ਅِ͔͔ఆ͢Δͷιϧόͷ͜ͱΛࢦ͕ͪ͠ΫΤϦใΦϥΫϧ ΫΤϦͷ݁Ռ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ"70SBDMF‣ 8JOEPXT%FGFOEFS͕ߦ͏ɺϑΝΠϧͷ෦తͳධՁͱͦΕʹجͮ͘ѱੑݕΛΦϥΫϧԽͯ͠ར༻͢ΔαΠυνϟωϧ߈ܸͷ͜ͱɻ‣ ࢯଞͷΞϯνΠϧειϑτΣΞɺͦͷଞҰൠͷ"VEJUPSzʹରͯ͠ɺಉछͷΦϥΫϧʢ"VEJUPS#BTFE0SBDMFʣ͕ߏͰ͖ΔՄೳੑʹ͍ͭͯݴٴ͍ͯ͠Δɻ‣ DG944"VEJUPSΛ༻͍ͨ944FBSDIIUUQTUXJUUFSDPNUOLTUBUVT T
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ#MJOE3FHFY*OKFDUJPO"UUBDL‣ ҎԼͷ͕݅Γཱͭͱ͖ʹʜ‣ ҙʹ༩͑Δ͜ͱͷͰ͖Δਖ਼نදݱʹΑΓɺ͋Δେͳ͕ࠪ͞ΕΔ‣ ਖ਼نදݱΤϯδϯ͕3F%P4߈ܸੑͷͳ͍ͷͰ͋Δ‣ ॲཧ࣌ؒΛαΠυνϟωϧͱͯ͠ɺͦͷΛϦʔΫ͢Δ͜ͱ͕Ͱ͖Δͱ͍͏߈ܸIUUQTEJBSZTIJGUKTJOGPCMJOESFHVMBSFYQSFTTJPOJOKFDUJPO
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟ8FCϒϥβͷαΠυνϟωϧΛ༻͍ͨ߈ܸ‣ 94-FBL‣ 8FCϒϥβͷαΠυνϟωϧͷ͜ͱɻ‣ ͜ΕΛ༻͍ͨ߈ܸ94-FBL"UUBDLͱݺΕΔɻ‣ 944FBSDI"UUBDL‣ ใࠪΛ͢ΔػೳͷڍಈΛ94-FBLʹΑΓಡΈग़͢͜ͱͰɺΦϥΫϧΛߏ͠ɺͦΕʹΑΓใͷ෮ݩΛࢦ͢߈ܸͷ͜ͱɻ‣ ຊߨٛͰৄ͘͠આ໌͠ͳ͍͕ɺࡢͷηΩϡϦςΟɾΩϟϯϓશࠃେձͰ͜ͷลΛऔΓѻͬͨͷͰɺͦͷࢿྉΛݟͯΈΔͱΑ͍ɻ[email protected]
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟͲ͏ରࡦ͍͖ͯ͘͠ʁ‣ 8FCͷྖҬʹ͓͍ͯαΠυνϟωϧ߈ܸແࢹͰ͖ͳ͍ɻ‣ αʔόαΠυͷαΠυνϟωϧΛ༻͍ͨ߈ܸ‣ දݱྗͷߴ͍ΫΤϦݴޠΛड͚औΓɺͦΕͰใΛࠪ͢Δͱ͖ɺΘ͔ͣͳڍಈ͕ࠩʹͳΔ߹͕͋ΔͷͰɺҙΛ͓͏ɻ‣ ࠪʹݶΒͣɺେͳσʔλͷॲཧͰɺ ࠷ྑcฏۉc࠷ѱܭࢉྔͷࠩΛҙࣝ͠Α͏ɻ‣ 8FCϒϥβͷαΠυνϟωϧΛ༻͍ͨ߈ܸ‣ ͦͦେͳใ͕8FCϒϥβʹಧ͔ͳ͍Α͏ʹɺ$PPLJFͷSameSite ଐੑΛݫ͠ʹӡ༻Ͱ͖ΔͱΑ͍ɻ‣ X-Frame-Options ϔομ$41ͷframe-ancestors σΟϨΫςΟϒɺCross-Origin-Resource-Policy ϔομɺCross-Origin-Opener-Policy ϔομɺrel=noopenerଐੑͳͲʹΑΓɺ͞Βʹใ࿙Εग़͢ܦ࿏Λ௵ͤΔɻ
͓ΘΓʹ1PTUGBDF
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟখ·ͱΊαΠυνϟωϧ߈ܸͷجૅ‣ αΠυνϟωϧ‣ ॲཧͷ݁Ռൃੜͨ͠ʮ෭࣍తͳӨڹͷ͋ΒΘΕʯ͕؍ଌͰ͖Δܦ࿏ͷ͜ͱɻ‣ ʮ෭࣍తͳӨڹͷ͋ΒΘΕʯͷྫ‣ ॲཧͷফඅిྗͷมԽ‣ ॲཧͷ࣮ߦ࣌ؒͷಛੑ‣ αΠυνϟωϧ߈ܸʜ͋Δॲཧʹର͢ΔαΠυνϟωϧΛ؍ଌ͢Δ͜ͱͰɺͦͷॲཧʹؔΘΔใΛϦʔΫ͢Δ߈ܸͷ͜ͱɻೖྗ ओͨΔग़ྗॲཧ෭࣍తͳӨڹͷ͋ΒΘΕ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟখ·ͱΊαΠυνϟωϧ߈ܸͷجૅ‣ 8FCͷྖҬʹ͓͍ͯαΠυνϟωϧ߈ܸແࢹͰ͖ͳ͍ɻ‣ αʔόαΠυͷαΠυνϟωϧΛ༻͍ͨ߈ܸ‣ දݱྗͷߴ͍ΫΤϦݴޠΛड͚औΓɺͦΕͰใΛࠪ͢Δͱ͖ɺΘ͔ͣͳڍಈ͕ࠩʹͳΔ߹͕͋ΔͷͰɺҙΛ͓͏ɻ‣ ࠪʹݶΒͣɺେͳσʔλͷॲཧͰɺ ࠷ྑcฏۉc࠷ѱܭࢉྔͷࠩΛҙࣝ͠Α͏ɻ‣ 8FCϒϥβͷαΠυνϟωϧΛ༻͍ͨ߈ܸ‣ ͦͦେͳใ͕8FCϒϥβʹಧ͔ͳ͍Α͏ʹɺ$PPLJFͷSameSite ଐੑΛݫ͠ʹӡ༻Ͱ͖ΔͱΑ͍ɻ‣ X-Frame-Options ϔομ$41ͷframe-ancestors σΟϨΫςΟϒɺCross-Origin-Resource-Policy ϔομɺCross-Origin-Opener-Policy ϔομɺrel=noopenerଐੑͳͲʹΑΓɺ͞Βʹใ࿙Εग़͢ܦ࿏Λ௵ͤΔɻ
TIJGUKTJOGPϚΫϩͳࢹ͔Βଊ͑Δ8FCηΩϡϦςΟऴΘΓʹ‣ ηΩϡϦςΟकΔ͖ͷ͋Γ͖ͷଘࡏͳͷͰʜ‣ ·ͣɺͦͷकΔ͖ͷΛेʹཧղ͢Δ͜ͱ͕େɻ‣ ͦͯ͠ɺकΔ͖ͷ͕มԽ͍͚ͯ͠ηΩϡϦςΟΛߟ͑Δ্Ͱ͖࣋ͭࢹมԽ͍ͯ͘͜͠ͱΛΕͣʹ͋Γ͍ͨɻ‣ Ҿ͖ଓָ͖ٕ͘͠ज़ͱ͖߹͍͖ͬͯ·͠ΐ͏