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
17
視点の探索と取得〜見える世界が変わるとは何か?何が見えるようになるのか?
yoshitaroyoyo
1
58
フォロワーを活かすリーダー リーダーを活かすフォロワー
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
DROBEの生成AI活用事例 with AWS
ippey
0
140
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
9
2.2k
『GO』アプリ バックエンドサーバのコスト削減
mot_techtalk
0
150
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
180
Ruby on cygwin 2025-02
fd0
0
150
Rubyで始める関数型ドメインモデリング
shogo_tksk
0
130
Writing documentation can be fun with plugin system
okuramasafumi
0
120
クリーンアーキテクチャから見る依存の向きの大切さ
shimabox
4
880
データベースのオペレーターであるCloudNativePGがStatefulSetを使わない理由に迫る
nnaka2992
0
210
楽しく向き合う例外対応
okutsu
0
510
Amazon ECS とマイクロサービスから考えるシステム構成
hiyanger
2
580
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
380
Featured
See All Featured
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
6
560
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
133
33k
Building Your Own Lightsaber
phodgson
104
6.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Gamification - CAS2011
davidbonilla
80
5.1k
Automating Front-end Workflow
addyosmani
1368
200k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
How to Think Like a Performance Engineer
csswizardry
22
1.4k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
40
2k
Building an army of robots
kneath
303
45k
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
͝੩ௌ ͋Γ͕ͱ͏͍͟͝·ͨ͠