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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
よしたろう
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
210
【登壇版】原初仏教の慈悲から学ぶ「心理的安全性」~チームとの接続点~
yoshitaroyoyo
2
280
構造化思考・システム化思考 でVUCAを生き抜こう! 簡略版
yoshitaroyoyo
0
64
構造化思考・システム化思考 でVUCAを生き抜こう! 詳細版
yoshitaroyoyo
0
72
【根拠まとめ版】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
0
46
【補完版:統合編】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
0
280
【登壇版:ナラティブ編】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
2
1.3k
人文学から学ぶ 人として、リーダーとして、スクラムマスターとしてのより善い在り方【完全版】
yoshitaroyoyo
0
62
自分を変えるを邪魔するのは自分自身!? 免疫マップで可視化てみよう!
yoshitaroyoyo
0
68
Other Decks in Programming
See All in Programming
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
530
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
160
ふつうのFeature Flag実践入門
irof
7
3.7k
作って学ぶ、 JSX (TSX) ランタイムの基本
syumai
7
1.6k
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
180
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
500
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
110
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
540
OSもどきOS
arkw
0
480
The NotImplementedError Problem in Ruby
koic
1
700
Swiftのレキシカルスコープ管理
kntkymt
0
220
Featured
See All Featured
Navigating Team Friction
lara
192
16k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Unsuck your backbone
ammeep
672
58k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
470
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Designing for Performance
lara
611
70k
Embracing the Ebb and Flow
colly
88
5.1k
BBQ
matthewcrist
89
10k
It's Worth the Effort
3n
188
29k
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
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠