Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
フロントエンドエンジニアのためのセキュリティ対策
CarstayJP
February 26, 2022
Technology
1
220
フロントエンドエンジニアのためのセキュリティ対策
CarstayJP
February 26, 2022
Tweet
Share
More Decks by CarstayJP
See All by CarstayJP
Google App Script(GAS)
carstayjp
0
110
C向けスタートアップのプロダクト開発の進め方
carstayjp
0
230
Other Decks in Technology
See All in Technology
複数のスクラムチームをサポートするエンジニアリングマネジメントの話
okeicalm
0
1.1k
Security Hub のマルチアカウント 管理・運用をサーバレスでやってみる
ch6noota
0
840
さいきんのRaspberry Pi。 / osc22do-rpi
akkiesoft
6
5.2k
Custom AppをIP制限ありのままで審査に通す方法
yusuga
0
680
インフラのCI/CDはGitHub Actionsに任せた
mihyon
0
110
The application of formal methods in Kafka reliability engineering
line_developers
PRO
1
190
DOM Invader - prototype pollution対応の衝撃 - / DOM Invader - prototype pollution
okuken
0
150
データエンジニアと作るデータ文化
yuki_saito
4
1.6k
音のような言葉 〜ちゃちゃっとチャットで楽しむちょっとしたコツ〜 / words like sounds
satoryu
1
1.4k
アーキテクチャを明文化して開発に臨んだ話
akkie76
0
330
Data in Google I/O - IO Extended GDG Seoul
kennethanceyer
0
150
Target SDK Versionを上げない Notification runtime permission対応
napplecomputer
0
140
Featured
See All Featured
The Web Native Designer (August 2011)
paulrobertlloyd
74
1.9k
The MySQL Ecosystem @ GitHub 2015
samlambert
238
11k
Ruby is Unlike a Banana
tanoku
91
9.2k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1.1k
Clear Off the Table
cherdarchuk
79
280k
Art, The Web, and Tiny UX
lynnandtonic
280
17k
KATA
mclloyd
7
8.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
119
28k
GraphQLとの向き合い方2022年版
quramy
16
8.3k
Designing for humans not robots
tammielis
241
23k
The Art of Programming - Codeland 2020
erikaheidi
32
11k
Practical Orchestrator
shlominoach
178
8.6k
Transcript
ϑϩϯτΤϯυΤϯδχΞ ͓͖͍ͬͯͨηΩϡϦςΟରࡦ XSSฤ 2022/02/26
Carstayגࣜձࣾɿ֓ཁ 2
Carstayגࣜձࣾɿϛογϣϯ 3 Stay Anywhere, Anytime. ୭͕͖ͳͱ͖ʹɺ͖ͳॴͰɺ͖ͳਓͱաͤ͝ΔੈքΛͭ͘Δ
CarstayגࣜձࣾɿϓϩμΫτ 4 ʮCarstayʯຊͰ།ҰɺΩϟϯϐϯάΧʔͱंதധεϙοτΛ༧͢Δ͜ͱ͕Ͱ͖ΔεϚϗΞϓϦͰ͢ Βͳ͍ظؒʹ༡ٳं྆ΛγΣΞ͍ͨ͠Φʔφʔɺۭ͖Λ༗ޮ׆༻͍ͨ͠றंΦʔφʔ͕ొ͍ͯ͠·͢
ࣗݾհ Ngo Van Thang | ϑϧελοΫΤϯδχΞ ▼ ܦྺ ɾ2014ʹଔۀޙʹདྷ ɾ2014
ιʔγϟϧήʔϜӡӦձࣾʹೖࣾ ɹɾήʔϜαʔόӡ༻ ɾ2016 ݣձࣾʹೖࣾ ɹɾίʔσΟϯάςεταʔϏεɺLINE৴αʔϏε։ൃ ɾ2018 ϒϩοΫνΣʔϯձࣾʹೖࣾ ɹɾϒϩοΫνΣʔϯΛͬͨΫϦΤʔλͱاۀͷϚονϯάαʔϏεɺӽڥEC։ൃ ɾ2020 Carstayגࣜձࣾʹೖࣾ | Tech Lead ɹɾ։ൃશൠཧɺίʔυϨϏϡʔɺΣϒɾΞϓϦ։ൃ ▼झຯ ɾήʔϜʢΞΫγϣϯήʔϜɺFPS etcʣ ɾαοΧʔ ɾίϚϯυϥΠϯ͕͖ Ngo Van Thangʢ30ࡀʣ @nooptr https://www.facebook.com/thanghedspi 5
Agenda • ੬ऑੑ(XSS)ͷΈͱରࡦ • σϞ • ·ͱΊ 6
ΣϒαΠτͷ੬ऑੑͷछྨผʢʣ 7 11% 2% 2% 3% 11% 13% 58% https://www.ipa.go.jp/files/000082044.pdf
XSS ʢΫϩεαΠτɾεΫϦϓςΟϯά ʣ DNSใͷઃఆෆඋ SQLΠϯδΣΫγϣϯ ϑΝΠϧͷޡͬͨެ։ σΟϨΫτϦɾτϥόʔαϧ HTTPSͷෆదͳར༻ ͦͷଞ
XSS ΫϩεαΠτɾεΫϦϓςΟϯά
XSSʢΫϩεαΠτεΫϦϓςΟϯάʣͱ ར༻ऀ͕ೖྗͨ͠༰Λදࣔ͢ΔΑ͏ͳߏͷWebαΠτʹଘࡏ͢Δܽ ؕΛѱ༻ͯ͠ɺ߈ܸऀ͕༻ҙͨ͠ѱҙͷ͋ΔεΫϦϓτΛར༻ऀͷݩʹ ૹΓࠐΜͰ࣮ߦͤ͞Δ߈ܸख๏ɻ 9
XSSͷΈ 10 Source: https://yamory.io/blog/about-xss/
ReactͷXSS
dangerouslySetInnerHTML 12 ▪ dangerouslySetInnerHTMLͱ ɾReactެࣜͷΤεέʔϓΛແޮԽ͢ΔΦϓγϣϯ ɾHTMLͱͯ͠ೝ͍ࣝͤͨ͞߹ͳͲʹར༻͢Δ
dangerouslySetInnerHTML 13 ▪ dangerouslySetInnerHTMLͱ ɾReactެࣜͷΤεέʔϓΛແޮԽ͢ΔΦϓγϣϯ ɾHTMLͱͯ͠ೝ͍ࣝͤͨ͞߹ͳͲʹར༻͢Δ DEMO: https://codesandbox.io/s/react-xss-example-forked-9n3exm
dangerouslySetInnerHTML 14 ▪ରࡦɿ ɾΘͳ͍ɻͲ͏ͯ͠ར༻͍ͨ͠߹ɺపఈతʹΤεέʔϓΛߦ͏ɻ ɾdompurifyͳͲͷϥΠϒϥϦΛ͏͜ͱͰɺXSSͷΛղܾͰ͖Δɻ https://github.com/cure53/DOMPurify
hrefଐੑɺઌ಄͕javascript:͔Β࢝·Δ߹ͦΕҎ߱ͷจࣈྻΛ javascriptͱ࣮ͯ͠ߦ͞ΕΔ Javascript: εΩʔϜ 15
hrefଐੑɺઌ಄͕javascript:͔Β࢝·Δ߹ͦΕҎ߱ͷจࣈྻΛ javascriptͱ࣮ͯ͠ߦ͞ΕΔ Javascript: εΩʔϜ 16 DEMO: https://codesandbox.io/s/react-xss-example-forked-g8hs86
▪ରࡦɿ ɾεΩʔϜΛhttp:// ͔ https://ͷΈʹ੍ޚ͢Δ ɾઌ಄ʹ / Λ͚ͭΔ Javascript: εΩʔϜ 17
DEMO: https://codesandbox.io/s/react-xss-example-forked-g8hs86
JSON.stringify(str) 18 ੬ऑ෦ ҎԼͷؚ͕·ΕΔͱɺXSS͕ੜ͡Δ Server Renderingͷ࣌ʹɺReactଆͰ͑ΔΑ͏ʹɺԼهͷΑ͏ͳίʔυ͕͋Δ
19 ID/ύεϫʔυ͕࿙Εͳ͔ͬͨΒຊʹେৎʁ
20 ͦΜͳ͜ͱͳ͍Ͱ͢Α
21 DEMO
·ͱΊ
·ͱΊ 23 ɾ࠷ଟ͍੬ऑੑXSS ɾXSSରࡦʹจࣈྻΛΤεέʔϓ͢Δ ɾXSSͷݪཧΛΒͳ͍ͱɺ؆୯ʹXSSͷ੬ऑੑΛ࡞ΓࠐΜͰ͠·͏ͷͰɺXSSͷཧղඞཁ ɾID/ύεϫʔυΛΒͳͯ͘ɺCookieใ͕Θ͔ͬͨΒɺϩάΠϯͰ͖ͯ͠·͏ͷͰɺ PCΘͳ͍࣌ඞͣը໘ΛϩοΫ͠·͠ΐ͏
CarstayɺઈࢍΤϯδχΞืूதͰ͢ʂ 24 ˒ CTOީิΤϯδχΞ ɾϑϩϯτΤϯυΤϯδχΞ ɾΞϓϦΤϯδχΞ ɾαʔόʔαΠυΤϯδχΞ ։ൃݴޠɿTypescriptɹ։ൃϑϨʔϜϫʔΫɿReactJS, React NativeɹWebαʔόɿNodeJS
ͥͻ͓ؾܰʹ͝࿈བྷ͍ͩ͘͞ ⏬
25 ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ