はてなダイアリーやブログのXSS対策の事例を紹介します
μΠΞϦʔͱϒϩάͱ944גࣜձࣾͯͳJEPOJTIJ!4IJCVZB944JO0TBLB
View Slide
ࣗݾհwJEPOJTIJେ߁༟wגࣜձࣾͯͳwνʔϑΤϯδχΞwͯͳϒϩάσΟϨΫλʔ
ͯͳͱݴ͑944
ͯͳφ
ͯͳͱ944wਓྗݕࡧͯͳRIBUFOBOFKQwͯͳΞϯςφBIBUFOBOFKQwͯͳμΠΞϦʔEIBUFOBOFKQwͯͳϒοΫϚʔΫCIBUFOBOFKQ
ͯͳͱ944wಉҰυϝΠϯɾಉҰΫοΩʔʹΑΔϢʔβʔೝূwΫοΩʔΛୣΘΕͨΒηογϣϯϋΠδϟοΫ͞ΕಘΔ
ͯͳμΠΞϦʔwϦϦʔεͷϒϩάαʔϏεwཧը໘ͱϒϩάը໘͕ಉҰυϝΠϯwϒϩάαʔϏεˠϢʔβʔίϯςϯπ
ͦͷฤू
Ϣʔβʔίϯςϯπw͖ͳ͜ͱΛॻ͖͍ͨw͖ͳσβΠϯʹ͍ͨ͠w͖ͳϒϩάύʔπΛ͍͍ͨ
Ϣʔβʔརศੑͱ҆શੑͷཱ྆
Ϣʔβʔίϯςϯπw͖ͳ͜ͱΛॻ͖͍ͨˠ)5.-944w͖ͳσβΠϯʹ͍ͨ͠ˠ$44944w͖ͳϒϩάύʔπΛ͍͍ͨˠººº
)5.-ͷ944ରࡦwར༻Մೳཁૉwར༻ՄೳଐੑwελΠϧཁૉwΠϯϥΠϯ$44
ҙ͖͢ཁૉwTDSJQUwPCKFDUwFNCFEwJGSBNFwTUZMFw
ҙ͖͢ଐੑwΠϕϯτϋϯυϥ PODMJDL POwKBWBTDSJQUεΩʔϚ͕ॻ͚ΔཁૉwISFG TSD DJUFwTUZMFwޙड़
ͯͳμΠΞϦʔͷ944ରࡦwར༻ՄೳཁૉˠϗϫΠτϦετܗࣜwར༻ՄೳଐੑˠϗϫΠτϦετܗࣜwಛఆͷཁૉɾଐੑˠઐ༻ͷରࡦwεΩʔϜରࡦwελΠϧରࡦ
$44ͷ944ରࡦwFYQSFTTJPOରࡦw!JNQPSUରࡦ
FYQSFTTJPOcolor: expression( error ? 'red' : 'blue');
FYQSFTTJPOίϝϯτexpr/* ίϝϯτ */ession
FYQSFTTJPOίʔυϙΠϯτ\0065xpression
FYQSFTTJPOશ̴̴̸͇֯̿́͂͂̾̽
FYQSFTTJPOจࣈ
FYQSFTTJPOҟମexpressio\207fexpressioⁿˣ
!JNQPSUw!JNQPSUઌΛల։͢Δw!JNQPS!JNQP!JNQ!JN!J
ϒϩάύʔπͷ944ରࡦwϗϫΠτϦετܗࣜwIUUQTNFUBDQBOPSHSFMFBTF)5.-8JEHFU7BMJEBUPS
ϒϩάύʔπͷ944ରࡦwϒϩάόʔπࣗʹ੬ऑੑ͕͋ΔwυϝΠϯࣦޮˠѱҙΛ࣋ͬͨ+4࣮ߦ
944ରࡦৄ͘͠wϔϧϓͯͳμΠΞϦʔ944ରࡦwIUUQIBUFOBEJBSZHIBUFOBOFKQLFZXPSEͯͳμΠΞϦʔ944ରࡦ
ͯͳϒϩάwϦϦʔεwIUUQIBUFOBCMPHDPNwIBUFOBOFKQ͡Όͳ͍ॳͷຊαʔϏεw+4ϑϦʔ
ϔομͷJGSBNFԽiframe blog.hatena.ne.jponishi.hatenablog.com
ΫϩευϝΠϯ௨৴ wXJOEPXQPTU.FTTBHFwΟϯυ ϑϨʔϜؒͰϝοηʔδͷૹड৴Λߦ͏ͨΊͷΈ// message Πϕϯτࢹwindow.addEventListener(“message”, function() {...},false);// message ૹ৴window.postMessage(data, “targetOrigin”);
ΫϩευϝΠϯ௨৴ wQPTU.FTTBHFඇରԠϒϥβ ݹ͍*&wMPDBUJPOIBTIʹΑΔυϝΠϯؒ௨৴wϑϨʔϜͷMPDBUJPOIBTIॻ͖͑wϑϨʔϜMPDBUJPOIBTIͷมԽΛࢹw5$1෩σʔλ௨৴w63-੍ݶ *&ͰόΠτʹΑΔύέοτׂ
ΫϩευϝΠϯ௨৴ͷར༻wͦͷฤूwӾཡऀͷฤूݖݶ֬ೝwͯͳελʔwίϝϯτw௨wϑΟʔυόοΫϑΥʔϜ
αʔυύʔςΟ$PPLJFwJGSBNFTDSJQUཁૉͰຒΊࠐ·Εͨ֎෦Ϧιʔεʹ$PPLJFΛૹ৴͢Δ͔w'JSFGPY͔ΒσϑΥϧτ0''wJGSBNFʹΑΔΫϩευϝΠϯ௨৴͕͑ͳ͍
αʔυύʔςΟ$PPLJF0''ରࡦwCMPHIBUFOBOFKQυϝΠϯͷ"1*ΞΫηεDPPLJFૹ৴͋Δ͔νΣοΫwJGSBNF͔ΒXJOEPXPQFOʹ͢ΔwϢʔβʔใ͕औΕͳ͍ͷͰସใΛදࣔ͢Δ
JGSBNF
XJOEPXPQFO
ସϔομ
ΞΫηείϯτϩʔϧwϒϩάͷϓϥΠϕʔτwೝূͷΈͷෳࡶԽw֎෦ͷιʔγϟϧάϥϑೝূwηογϣϯϋΠδϟοΫࢭwϒϩάຖʹผυϝΠϯwผϢʔβʔʹ࿙ΕͯͳΔ͘ͳ͍wηογϣϯຖʹ%#ΞΫηε͠ͳ͍
ΞΫηείϯτϩʔϧ ॳճΞΫηε࣌ͷΈೝূػ͕ؔ%#ΛҾ͘ UPLFOͰϒϩάʹϦμΠϨΫτ ϒϩάຖʹӾཡ༻DPPLJFΛൃߦ ΞΫηε࣌ʹDPPLJFͷଥੑݕূͷΈೝূػؔ.hatena.ne.jpϒϩάanydomainϢʔβʔ
ΞΫηείϯτϩʔϧ ॳճΞΫηε࣌ͷΈೝূػ͕ؔ%#ΛҾ͘UPLFOͰϒϩάʹϦμΠϨΫτ ϒϩάຖʹӾཡ༻DPPLJFΛൃߦ ΞΫηε࣌ʹDPPLJFͷଥੑݕূͷΈೝূػؔ.hatena.ne.jpϒϩάanydomainϢʔβʔUPLFO
ΞΫηείϯτϩʔϧ ॳճΞΫηε࣌ͷΈೝূػ͕ؔ%#ΛҾ͘ UPLFOͰϒϩάʹϦμΠϨΫτϒϩάຖʹӾཡ༻DPPLJFΛൃߦ ΞΫηε࣌ʹDPPLJFͷଥੑݕূͷΈೝূػؔ.hatena.ne.jpϒϩάanydomainϢʔβʔDPPLJF
ΞΫηείϯτϩʔϧ ॳճΞΫηε࣌ͷΈೝূػ͕ؔ%#ΛҾ͘ UPLFOͰϒϩάʹϦμΠϨΫτ ϒϩάຖʹӾཡ༻DPPLJFΛൃߦΞΫηε࣌ʹDPPLJFͷଥੑݕূͷΈೝূػؔ.hatena.ne.jpϒϩάanydomainϢʔβʔ
ΫϦοΫδϟοΩϯάରࡦw9'SBNF0QUJPOT%&/:wϑϨʔϜ༻ͷཁૉ໌ࣔతʹڐՄwͦͷ߹ɺ*/165ཁૉͷมߋΛࢹ
ΫϦοΫδϟοΩϯάରࡦ
·ͱΊwͯͳμΠΞϦʔwIBUFOBOFKQυϝΠϯͳͷͰపఈͨ͠ϗϫΠτϦετରࡦwͯͳϒϩάwಠࣗυϝΠϯΫϩευϝΠϯ௨৴
ਓࡐืूwגࣜձࣾͯͳͰΤϯδχΞͦͷଞશ৬छΛืू͍ͯ͠·͢wҰॹʹϒϩάΛ࡞Γ·͠ΐ͏ʂwww.hatena.ne.jp/company/staff
αϚʔΠϯλʔϯw िؒw8FCαʔϏε։ൃίʔε໊ఔwେنγεςϜݚڀίʔε໊ఔwۙʑืू։࢝͠·͢ʂʂdeveloper.hatenastaff.com