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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Ryusei Ishikawa
November 12, 2025
Technology
630
0
Share
“それなりに”安全な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
160
OSINT CTFの リアル作問環境を体験してみよう!
xryuseix
0
360
OSINT CTFを支える技術
xryuseix
1
1.2k
HTTP通信を書きかえてみよう
xryuseix
0
89
Webアプリケーションのユーザ入力検証
xryuseix
3
1.3k
Privateリポジトリで 管理しているソースコードを 無料でGitHub Pagesに公開する
xryuseix
0
5k
CTFにおけるOSINT問題作問の難しさ
xryuseix
0
840
「Reactはビルド時にコメントが消えるから」と言ってコメントに💩を書いてはいけない
xryuseix
0
1.5k
Other Decks in Technology
See All in Technology
電子辞書Brainをネットに繋げてみた(自力編)
raspython3
0
400
JJUG CCC 2026 Spring AI時代の開発こそ標準化を武器に! ― 方式・プロセス・プラットフォームの標準化
s27watanabe
2
650
イベントストーミングとKiroの仕様駆動開発で実現する要件の認識合わせプロセス
syobochim
7
1k
形式手法特論:公平性制約の位相的特徴づけ #kernelvm / Kernel VM Study Kansai 12th
ytaka23
1
660
なぜハノーバーメッセに行くべきなのか 〜初参加だから語れること〜
tanakaseiya
0
190
オンコールの負荷軽減のためのBits Assistant 活用方法 / How to Use Bits Assistant to Reduce the Workload on On-Call Staff
sms_tech
1
360
Platform engineering for developers, architects & the rest of us (AI agents)
danielbryantuk
0
160
Databricks 月刊サービスアップデート 2026年05月号
tyosi1212
0
130
インフラが苦手でも大丈夫! 紙芝居 Kubernetes -WWGT 10周年編-
aoi1
1
310
自称宇宙最速で不合格となったAIP-C01にリベンジを果たすべくAIで問題集アプリを作ってみた。
yama3133
0
260
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
2.8k
組織の中で自分を経営する技術
shoota
0
230
Featured
See All Featured
Test your architecture with Archunit
thirion
1
2.3k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
190
Ethics towards AI in product and experience design
skipperchong
2
290
Git: the NoSQL Database
bkeepers
PRO
432
67k
Utilizing Notion as your number one productivity tool
mfonobong
4
310
Abbi's Birthday
coloredviolet
2
7.8k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.4k
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
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 • 認証認可系は共通モジュール化する • 型がある言語を採用・入力値の検証をする • ユーザによって汚染可能な変数を意識する • ちゃんと寝る
ご紹介した楽にできそうなこと一覧 :