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
Javaによるセキュアコーディングの第一歩
Search
よしたろう
August 12, 2023
Programming
190
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Javaによるセキュアコーディングの第一歩
よしたろう
August 12, 2023
More Decks by よしたろう
See All by よしたろう
私たちを縛る呪いは解けるのか?〜赦しの先にある自由〜
yoshitaroyoyo
1
580
【登壇版】原初仏教の慈悲から学ぶ「心理的安全性」~チームとの接続点~
yoshitaroyoyo
2
330
構造化思考・システム化思考 でVUCAを生き抜こう! 簡略版
yoshitaroyoyo
0
76
構造化思考・システム化思考 でVUCAを生き抜こう! 詳細版
yoshitaroyoyo
0
90
【根拠まとめ版】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
0
64
【補完版:統合編】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
0
300
【登壇版:ナラティブ編】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
2
1.3k
人文学から学ぶ 人として、リーダーとして、スクラムマスターとしてのより善い在り方【完全版】
yoshitaroyoyo
0
73
自分を変えるを邪魔するのは自分自身!? 免疫マップで可視化てみよう!
yoshitaroyoyo
0
87
Other Decks in Programming
See All in Programming
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
190
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
1k
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
630
Google Apps Script で Ruby を動かす
kawahara
0
270
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.6k
Claude CodeとAgentCore Gatewayを繋ぐ際の認証認可 / Authentication and authorization when connecting Claude Code with AgentCore Gateway
har1101
2
300
複数の Claude Code が"放置"されてしまう問題をCLI ダッシュボードを自作して解決した話
sumihiro3
1
700
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
470
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
520
TSX の <Hoge<Fuga>> という構文に驚いた話 / tsx-type-argument-syntax
kanaru0928
0
230
「人を評価する AI」の設計と実装
ryoyanara
0
210
AWS CDK を「作」ってみた 〜フルスクラッチで見えた CDK の裏側〜 / aws-cdk-from-scratch
gotok365
3
2.8k
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
Code Review Best Practice
trishagee
74
20k
Designing for Timeless Needs
cassininazir
1
450
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Abbi's Birthday
coloredviolet
3
9.4k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
870
Designing for humans not robots
tammielis
254
26k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
960
Visualization
eitanlees
152
17k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
620
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.8k
Transcript
@yoshitaro-yoyo 2023/01/28 参照から学ぶセキュアコーディング
@yoshitaro-yoyo 2023/01/28 参照から学ぶセキュアコーディング
ΤϯδχΞલ ݄d ɹɹɹɹɹɹ ݄d ݄d
!ZPTIJUBSPZPZP ༀہళɾྟচֶٕ࢜ɾͤͲΓɾεΫʔϧߨࢣ େࡕͷडୗ։ൃاۀ େࡕͷࣗࣾ։ൃͷ4&4෦ ۚͷۜࢠձࣾࣗࣾ։ൃاۀ ΤϯδχΞͷྠɾژϓϩάϥϛϯάڭࣨӡӦϝϯόʔ झຯ μϯεɾԻָɾόΠΫɾөըɾອըখઆɾྉཧɾΞʔτFUD yoshitaro
ෳʮγϟϩίϐʔͱσΟʔϓίϐʔʯ ผ໊ࢀরʹ͍ͭͯ ෆมੑʢJNNVUBCMFʣ ෆมΦϒδΣΫτͷམͱ݀͠ ɹɹσΟϑΣϯγϒίϐʔ ৴པڥք 5SVTU#PVOEBSZ 参照から学ぶセキュアコーディング
ෳʮγϟϩίϐʔͱσΟʔϓίϐʔʯ
γϟϩίϐʔࢀরͷෳ σΟʔϓίϐʔ࣮ମͷෳ ෳͷׂͱͯ͠ɺ࣮ମͷෳ͕ٻΊΒΕ͍ͯΔɻ
γϟϩίϐʔɺ ࢀর ͷڞ༗Ͱ͢ ࢀরڞ༗ͷݪҼͰ͢ɻ
Date retirementDate = new Date(Date.parse("Tue 1 Nov 2016")); Date partyDate
= retirementDate; ϝϞϦ্ͰԿ͕ى͖͍ͯΔͷͰ͠ΐ͏͔ʁ
Date retirementDate = new Date(Date.parse("Tue 1 Nov 2016”)); Date partyDate
= retirementDate; 、 ⾔ ⼀時保存領域 、 展開 必要 。 両者 違 、 ⼤ 。 様 ⼤ 領域 扱 (Java)
σΟʔϓίϐʔɺ ࣮ମͷෳͰ͢ ຊདྷෳͱͪ͜ΒͷҙຯΛࢦ͖͢ɻ
Date retirementDate = new Date(Date.parse("Tue 1 Nov 2016")); Date partyDate
= new Date(retirementDate.getTime()); σΟʔϓίϐʔͰɺෳݩͷΛ༻͍ͯΠϯελϯεԽ Date retirementDate = new Date(Date.parse("Tue 1 Nov 2016")); Date partyDate = retirementDate; γϟϩίϐʔ͜Ε
new 演算⼦ 領域 新 展開 特殊 演算⼦ 1.
領域 新領域 確保 2. 格納 値 3. 新領域 参照値 変数代⼊ Date retirementDate = new Date(Date.parse("Tue 1 Nov 2016")); Date partyDate = new Date(retirementDate.getTime());
ίϯϐϡʔλϝϞϦྖҬ04ͱݴޠͰγΣΞ ώʔϓྖҬʹΠϯελϯε ϩʔΧϧมͱ͔ελοΫ ෆมੑʹෳʹछྨ͕͋ΓɺͦΕͧΕ۠ผ͕ॏཁ
ϓϦϛςΟϒܕ͕ͦͷ··ෳ͞ΕΔ ɹˠελοΫྖҬʢσΟʔϓίϐʔʹࣅ͍ͯΔʣ ࢀরܕࢀরઌͷΞυϨε͕ෳ͞ΕΔ ɹˠγϟϩίϐʔ
˞4USJOHܕࢀরܕ͕ͩɺෆมΦϒδΣΫτͳͷͰ ࠶ೖͷʹΠϯελϯε͕ੜ͞ΕΔ ࠶ೖ͞ΕΔσʔλͷܕ͕ ϓϦϛςΟϒܕ͔ࢀরܕ͔ʹΑͬͯڍಈ͕มΘΔ
ෳʮγϟϩίϐʔͱσΟʔϓίϐʔʯ ผ໊ࢀরʹ͍ͭͯ ෆมੑʢJNNVUBCMFʣ ෆมΦϒδΣΫτͷམͱ݀͠ ɹɹσΟϑΣϯγϒίϐʔ ৴པڥք 5SVTU#PVOEBSZ 参照から学ぶセキュアコーディング
ผ໊ࢀরʹ͍ͭͯ
・⼆枚⽬ Date partyDate = retirementDate; 同 参照値 共有 ・三枚⽬ partyDate.setDate(5);
「共有 状態 意図 変更 」 Setter 様 可変 場合 、発⽣ 問題 「 不注意」 Java・Ruby・Python・PHP 、参照 複製 明⽰的 記述 OOP 起
None
·ͨɺ$ ͷߏମϓϦϛςΟϒܕͷͨΊɺ ෳ͢ΔͱৗʹผͷΠϯελϯε͕ੜ͞ΕΔ ͭ·Γೖ࣌ʹৗʹෳ͕ߦΘΕΔ
ผ໊ࢀরͷຊ࣭ ʮڞ༗͞ΕͨΠϯελϯε͕ՄมΦϒδΣΫ τͷ߹ɺঢ়ଶมߋ͕ҙਤͤͣى͖͏Δʯ ͜ͱͰ͢ɻ ͔͜͜Βݟग़ͤΔղܾࡦͰ͢ɻ
ෆมΦϒδΣΫτΛѻ͏͖ ೖ࣌ৗʹෳΛߦ͏͖ ෆมੑʹෳʹछྨ͕͋ΓɺͦΕͧΕ۠ผ͕ॏཁ ෆมͰ͋ΕγϟϩίϐʔͰࢀর͕ڞ༗͞Εͯͳ͍ɻมߋͰ͖ͳ͍͔Βͩɻ มߋΛ͛ͳ͍ɾՄมΦϒδΣΫτ͔͠ѻ͑ͳ͍ͷͰ͋ΕɺৗʹσΟʔϓίϐʔΛฦ͢
ෳʮγϟϩίϐʔͱσΟʔϓίϐʔʯ ผ໊ࢀরʹ͍ͭͯ ෆมੑʢJNNVUBCMFʣ ෆมΦϒδΣΫτͷམͱ݀͠ ɹɹσΟϑΣϯγϒίϐʔ ৴པڥք 5SVTU#PVOEBSZ 参照から学ぶセキュアコーディング
ෆมੑʢJNNVUBCMFʣ
ΦϒδΣΫτͷঢ়ଶΛมߋ͢ΔΞΫηαϝιουΛఏڙ͠ͳ͍ ܧঝͤ͞ͳ͍ʢΫϥεΛɹGJOBMɹʹ͢Δ͔ίϯετϥΫλΛɹQSJWBUFɹʹ͢Δʣ ɹɹɹΘΓʹQVCMJDɹͰTUBUJDͳϑΝΫτϦϝιουΛఏڙ͢Δ ɹͯ͢ͷϑΟʔϧυΛɹGJOBMɹʹ͢Δ ɹͯ͢ͷϑΟʔϧυΛQSJWBUFʹ͢Δ ɹΫϥε͕อ࣋͢ΔϑΟʔϧυʹՄมΦϒδΣΫτ͕͋ͬͨ߹ɺ ɹͦΕʹର͢ΔಠతΞΫηεΛอূ͢Δ
ෳʮγϟϩίϐʔͱσΟʔϓίϐʔʯ ผ໊ࢀরʹ͍ͭͯ ෆมੑʢJNNVUBCMFʣ ෆมΦϒδΣΫτͷམͱ݀͠ ɹɹσΟϑΣϯγϒίϐʔ ৴པڥք 5SVTU#PVOEBSZ 参照から学ぶセキュアコーディング
ෆมΦϒδΣΫτͷམͱ݀͠ σΟϑΣϯγϒίϐʔ
FYBNQMF FYBNQMF
None
None
ෳʮγϟϩίϐʔͱσΟʔϓίϐʔʯ ผ໊ࢀরʹ͍ͭͯ ෆมੑʢJNNVUBCMFʣ ෆมΦϒδΣΫτͷམͱ݀͠ ɹɹσΟϑΣϯγϒίϐʔ ৴པڥք 5SVTU#PVOEBSZ 参照から学ぶセキュアコーディング
৴པڥք 5SVTU#PVOEBSZ
ϓϩάϥϜʹҾ͔Εͨڥքઢ ɾҰํͰɺσʔλ৴པͰ͖ͳ͍ ɾଞํͰɺσʔλ৴པͰ͖Δ ͱఆ ৴པͰ͖ͳ͍ଆ͔Βೖ͖ͬͯͨσʔλɺݕূʹύεɾ ແԽ͠͡Ίͯɺ৴པͰ͖ΔଆʹҠ͢͜ͱ͕Ͱ͖Δɻ ͭ·ΓϗϫΠτϦετܗࣜͰ҆શੑΛ୲อ͢Δɻ ৴པڥք
5SVTU#PVOEBSZ
ઢ͕৴པڥքઢ
ׂҎ্ͷιϑτΣΞηΩϡϦςΟ ʮೖྗɾग़ྗʯͰൃੜ͍ͯ͠Δ ʮ৴པڥքઢ্ʯͰޚΛߦ͏ʮڥքޚʯͷ֓೦ͱͯॏཁ
ೖྗͷόϦσʔγϣϯ ৴པڥքΛӽ͑Δશͯͷσʔλ͕ೖྗͱͯ͠৴པͰ ͖Δೖྗʢଥͳೖྗʣ͔ݕূ͢Δ ग़ྗͷશͳແԽ ৴པڥքΛӽ͑Δશͯͷग़ྗσʔλΛແԽ͢Δ $&355PQ4FDVSF$PEJOH1SBDUJDFTͷʮҐʯͱʮҐʯ
$&35ถΧʔωΪʔϝϩϯେֶʹઃஔ͞ΕͨίϯϐϡʔληΩϡϦςΟରࡦΛߦ͏ฮͷ৫
ϓϩάϥϜʹҾ͔Εͨڥքઢ ɾҰํͰɺσʔλ৴པͰ͖ͳ͍ ɾଞํͰɺσʔλ৴པͰ͖Δ ͱఆ ৴པͰ͖ͳ͍ଆ͔Βೖ͖ͬͯͨσʔλɺݕূʹύε ͯ͠͡Ίͯɺ৴པͰ͖ΔଆʹҠ͢͜ͱ͕Ͱ͖Δɻ ৴པڥք 5SVTU#PVOEBSZ
None
ϓϩάϥϜʹҾ͔Εͨڥքઢ ɾҰํͰɺσʔλ৴པͰ͖ͳ͍ ɾଞํͰɺσʔλ৴པͰ͖Δ ͱఆ ৴པͰ͖ͳ͍ଆ͔Βೖ͖ͬͯͨσʔλɺݕূʹύε ͯ͠͡Ίͯɺ৴པͰ͖ΔଆʹҠ͢͜ͱ͕Ͱ͖Δɻ ৴པڥք 5SVTU#PVOEBSZ
ෳʮγϟϩίϐʔͱσΟʔϓίϐʔʯ γϟϩίϐʔࢀরͷෳɾσΟʔϓίϐʔ࣮ମͷෳ ผ໊ࢀরʹ͍ͭͯ ՄมΦϒδΣΫτͷࢀরڞ༗͕μϝ ෆมੑʢJNNVUBCMFʣ ࠷ۙσϑΝΫτελϯμʔυ ෆมΦϒδΣΫτͷམͱ݀͠ ෆมΦϒδΣΫτʹՄมΦϒδΣΫτͷࢀরΛ͢ࡍҙ ෆมΦϒδΣΫτ͕ՄมΦϒδΣΫτͷࢀরΛฦ͢ࡍҙ ৴པڥք
5SVTU#PVOEBSZ ͜͜Ͱ֎ͱΛΓ͚ɻ͜͜Ͱޚ͢Δɻଆͷੈք まとめ
None
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠