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
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
よしたろう
August 12, 2023
Programming
180
1
Share
Javaによるセキュアコーディングの第一歩
よしたろう
August 12, 2023
More Decks by よしたろう
See All by よしたろう
私たちを縛る呪いは解けるのか?〜赦しの先にある自由〜
yoshitaroyoyo
0
140
【登壇版】原初仏教の慈悲から学ぶ「心理的安全性」~チームとの接続点~
yoshitaroyoyo
2
250
構造化思考・システム化思考 でVUCAを生き抜こう! 簡略版
yoshitaroyoyo
0
51
構造化思考・システム化思考 でVUCAを生き抜こう! 詳細版
yoshitaroyoyo
0
62
【根拠まとめ版】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
0
41
【補完版:統合編】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
0
270
【登壇版:ナラティブ編】人はなぜ変われないのか?自分を変えるとは何か?どう在るべきなのか?
yoshitaroyoyo
2
1.2k
人文学から学ぶ 人として、リーダーとして、スクラムマスターとしてのより善い在り方【完全版】
yoshitaroyoyo
0
56
自分を変えるを邪魔するのは自分自身!? 免疫マップで可視化てみよう!
yoshitaroyoyo
0
50
Other Decks in Programming
See All in Programming
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
820
事業会社でのセキュリティ長期インターンについて
masachikaura
0
230
今年もTECHSCOREブログを書き続けます!
hiraoku101
0
230
Everything Claude Code OSS詳細 — 5層構造の中身と導入方法
targe
0
160
VueエンジニアがReactを触って感じた_設計の違い
koukimiura
0
160
SkillがSkillを生む:QA観点出しを自動化した
sontixyou
6
3.1k
それはエンジニアリングの糧である:AI開発のためにAIのOSSを開発する現場より / It serves as fuel for engineering: insights from the field of developing open-source AI for AI development.
nrslib
1
830
의존성 주입과 모듈화
fornewid
0
100
AIと共にエンジニアとPMの “二刀流”を実現する
naruogram
0
130
まかせられるPM・まかせられないPM / DevTech GUILD Meetup
yusukemukoyama
0
110
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
560
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
4
2.8k
Featured
See All Featured
The Curse of the Amulet
leimatthew05
1
11k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
52k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
220
The Language of Interfaces
destraynor
162
26k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
What does AI have to do with Human Rights?
axbom
PRO
1
2.1k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.1k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.5k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
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
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠