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
“それなりに”安全なWebアプリケーションの作り方
Search
Ryusei Ishikawa
November 12, 2025
Technology
710
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
“それなりに”安全なWebアプリケーションの作り方
TechBull LT&交流会!#3 で使用したLTスライドです。
https://techbull.connpass.com/event/368936/
Ryusei Ishikawa
November 12, 2025
More Decks by Ryusei Ishikawa
See All by Ryusei Ishikawa
DIVER OSINT CTF を支える技術 2025
xryuseix
0
240
OSINT CTFの リアル作問環境を体験してみよう!
xryuseix
0
440
OSINT CTFを支える技術
xryuseix
1
1.3k
HTTP通信を書きかえてみよう
xryuseix
0
94
Webアプリケーションのユーザ入力検証
xryuseix
3
1.4k
Privateリポジトリで 管理しているソースコードを 無料でGitHub Pagesに公開する
xryuseix
0
5.2k
CTFにおけるOSINT問題作問の難しさ
xryuseix
0
870
「Reactはビルド時にコメントが消えるから」と言ってコメントに💩を書いてはいけない
xryuseix
0
1.5k
Other Decks in Technology
See All in Technology
Oracle AI Databaseデータベース・サービス: BaseDB/ExaDB-Dの可用性
oracle4engineer
PRO
1
960
Introduction to Sansan Meishi Maker Development Engineer
sansan33
PRO
0
460
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
0
180
研究開発部の紹介 / Sansan R&D Profile
sansan33
PRO
4
24k
APIセキュリティを組織で実現するには~注力する点と設計・実装に入れたい対策~
riiimparm
2
720
[ホンマでっか SRE] あなたはなぜ SRE に?
_awache
0
360
PdMをやめて、 "プロダクトビルダー"という 働き方に変えました / PdM to Product Builder
shikichee
1
130
Bill One 開発エンジニア 紹介資料
sansan33
PRO
7
20k
「面白い!」を信じ抜け。激動の時代を貫く、オンリーワン・エンジニアの条件
kizawa2020
2
400
わたしが知り合いゼロの勉強会に 行けるようになるまで
r5ni4
2
830
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
6
3.3k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.5k
Featured
See All Featured
A brief & incomplete history of UX Design for the World Wide Web: 1989–2019
jct
2
490
Optimising Largest Contentful Paint
csswizardry
37
3.9k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Product Roadmaps are Hard
iamctodd
55
12k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.4k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Marketing to machines
jonoalderson
1
5.7k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
220
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Site-Speed That Sticks
csswizardry
13
1.5k
Transcript
“それなりに”安全な Webアプリケーションの作り方 石川琉聖 (xryuseix) @ryusei_ishika GMO Flatt Security Inc.
石川琉聖 (xryuseix) @ryusei_ishika GMO Flatt Security株式会社 所属。 専門はWebセキュリティ、 Webアプリケーションの開発、 OSINTなど。
趣味は麻雀🀄、開発💻、CTF🚩。 お仕事でやっていたこと プログラミング学習サービスのコンテンツ制作 (アルバイト) フロントエンド・バックエンドエンジニア (アルバイト) セキュリティエンジニア @ GMO Flatt Security Webアプリ脆弱性診断、クラウドペンテストなどをしています 2020-2023 2021-2025 2025- 自己紹介
怖い人「セキュリティ?知らねぇよ。 まずは納期までに動くもの作る方が優先でしょ」 とても怖い偉い人 僕「た、たしかに......?」 3 Webアプリケーションの開発でこんなことありませんか?
じゃあ...... 4 今回は実装コストがかからないやつを 4つ紹介します 「なんかコスパよく 、Webアプリが”それなりに ” 安全になる開発テクニックってないっすか?」
今日はこんなAPIを題材に喋っていきます 5
1. 認証認可系は共通モジュール化する 6 • JWTの検証 • JWTに書かれていたユーザが、 /money/transfer APIを使用する権限を 持っているか
• そもそもsenderIdって必要? • 「このAPIだけ認証認可を実装し忘れてた!」を防ぎたい • 「Controllerでこの関数さえ呼べばOK!」など、 何も考えなくてもいい感じに認証認可される を目指す 題材のAPIで考えるべきこと
2. 型がある言語を採用・入力値の検証をする 7 • senderId, receiverIdは文字型 ◦ /[a-z_]+/のみ許可する • amountは正の整数
• ユーザ入力のvalidationがあるだけで、 体感8割くらい攻撃者のできることが減ります (出典なし) • validationをする最も楽な方法が、型のある言語の導入 ◦ ダメだったら勝手にエラーになるから • これに加えて、型のとり得る値のスコープを狭める ◦ 正の整数, URL format, uuid format など 題材のAPIで考えるべきこと
3. ユーザによって汚染可能な変数を意識する 8 • senderId, receiverId, amountは ユーザが任意の値に書き換えてくる • 検証後のJWTの値は信用していい
• 攻撃者がどの変数の値を汚染 (変更)できるのか を意識する ◦ 汚染された値を加工した値も汚染されている ◦ 汚染された値は特に重点的に検証する 題材のAPIで考えること baseSQL = "SELECT * FROM users" senderSQL = baseSQL + "WHERE sender_id = " + senderId sender = db.query(senderSQL) ←ユーザ入力
4. 眠い時に大事な実装をしない 9 • ちゃんと寝る 。 • 実装者やLLMが「ヨシ!w」と言ってるからと言って、 レビュアも雑に「ヨシ!w」と言わない。ちゃんと見る 。
終わり 10 • 認証認可系は共通モジュール化する • 型がある言語を採用・入力値の検証をする • ユーザによって汚染可能な変数を意識する • ちゃんと寝る
ご紹介した楽にできそうなこと一覧 :