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
1
150
Javaによるセキュアコーディングの第一歩
よしたろう
August 12, 2023
Tweet
Share
More Decks by よしたろう
See All by よしたろう
銀河英雄伝説・攻殻機動隊 から人としてのあり方を学んだ
yoshitaroyoyo
1
16
視点の探索と取得〜見える世界が変わるとは何か?何が見えるようになるのか?
yoshitaroyoyo
1
57
フォロワーを活かすリーダー リーダーを活かすフォロワー
yoshitaroyoyo
1
100
対話・多様性が イノベーション・情報精緻化・組織学習に繋がる
yoshitaroyoyo
1
41
人文学から学ぶ 人として、リーダーとして、スクラムマスターとしてのより善い在り方
yoshitaroyoyo
3
1.6k
世界のTOPが世界をどう捉えているのか知りたくないっすか?
yoshitaroyoyo
1
50
スクラムマスターって孤独じゃないですか?
yoshitaroyoyo
1
250
組織学習とアジャイル
yoshitaroyoyo
1
290
スクラムマスターのお仕事.pdf
yoshitaroyoyo
0
130
Other Decks in Programming
See All in Programming
WebDriver BiDiとは何なのか
yotahada3
1
140
Compose でデザインと実装の差異を減らすための取り組み
oidy
1
310
Formの複雑さに立ち向かう
bmthd
1
850
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
190
JavaScriptツール群「UnJS」を5分で一気に駆け巡る!
k1tikurisu
9
1.8k
Conform を推す - Advocating for Conform
mizoguchicoji
3
690
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
140
バックエンドのためのアプリ内課金入門 (サブスク編)
qnighy
8
1.8k
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
250
一休.com のログイン体験を支える技術 〜Web Components x Vue.js 活用事例と最適化について〜
atsumim
0
450
チームリードになって変わったこと
isaka1022
0
200
Rails アプリ地図考 Flush Cut
makicamel
1
120
Featured
See All Featured
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.3k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
100
18k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Large-scale JavaScript Application Architecture
addyosmani
511
110k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
We Have a Design System, Now What?
morganepeng
51
7.4k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
440
The Pragmatic Product Professional
lauravandoore
32
6.4k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Statistics for Hackers
jakevdp
797
220k
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
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠