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
Security course
Search
mogumogu mogumi
May 14, 2019
Technology
130
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Security course
mogumogu mogumi
May 14, 2019
More Decks by mogumogu mogumi
See All by mogumogu mogumi
9/13 九州大学OB企業訪問資料[パーソンリンク]
mgmgmogumi
0
100
ツールで見るフロント界のトレンド
mgmgmogumi
0
86
機械学習APIの紹介とデモ.pdf
mgmgmogumi
0
43
エンジニアの日常
mgmgmogumi
0
230
読み手の印象推定に基づくツイートのフィルタリングに関する研究 / A Study on Filtering Tweet based on Impression Estimation of Reading
mgmgmogumi
0
160
読み手の印象推定に基づくツイートのフィルタリングに関する研究 ポスター / A Study on Filtering Tweet based on Impression Estimation of Reading (Poster)
mgmgmogumi
0
31
kurogi kurumi student work
mgmgmogumi
0
300
ここからうまれたぼくたち酵母~pao
mgmgmogumi
0
39
Other Decks in Technology
See All in Technology
2026TECHFRESH畢業分享會 - 原生還是跨平台? App 開發踩坑實錄
line_developers_tw
PRO
0
970
人材育成分科会.pdf
_awache
4
220
GitHub Copilot 最新アップデート – 「一歩先」の実践活用術
moulongzhang
1
220
脆弱性対応、どこで線を引くか
rymiyamoto
1
380
AIネイティブな開発のサプライチェーンリスク対策 〜激動の開発現場でリスクに立ち向かう〜【ZennFes】
cscengineer
PRO
2
120
自律型AIエージェントは何を破壊するのか
kojira
0
160
AIはどのように 組織のアジリティを変えるのか?
junki
2
730
Claude Codeをどのように キャッチアップしているか
oikon48
12
7.8k
失敗を資産に変えるClaude Code
shinyasaita
0
640
2026 TECHFRESH 畢業分享會 - AI-Native 重塑軟體工程與虛擬講師
line_developers_tw
PRO
0
970
ACE-Step-1.5で見る 音楽生成AIのしくみと“破綻だけ直す”Retake機能の開発【zennfes spring 2026 登壇資料】
personabb
1
370
【NRUG vol.18】KubernetesにおけるNew Relicデータ取得量削減の考え方
nrug_member
0
110
Featured
See All Featured
WCS-LA-2024
lcolladotor
0
630
The Invisible Side of Design
smashingmag
302
52k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
Abbi's Birthday
coloredviolet
2
8k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
1
190
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
140
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Balancing Empowerment & Direction
lara
6
1.2k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
610
From π to Pie charts
rasagy
0
210
Transcript
セキュリティ講座 2019/5/14 @kurumi.kurogi
セキュリティとは?
セキュリティとは 安全、防犯、保安 コンピュータやソフトウェアなどを技術的に保護し 漏洩、改ざん、攻撃、侵入などの危険を排除
セキュリティとは 構築時? 実装時? 運用時?
セキュリティとは 構築時? 実装時? 運用時?
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
None
SQLインジェクション 脆弱性のある実装 $query = "SELECT * FROM user WHERE id
= ‘$uid’”; $uidに以下を入れてみると? •‘or ‘A’=‘A •‘; delete * from user where ‘a’=‘a
対策 • プレースホルダ • エスケープ処理 ※LaravelやRailsなどのFWを使用する場合は、ORMがいい感じ に処理してくれることが多い
対策 修正後の実装(プレースホルダ使用) $query = "SELECT * FROM usr WHERE uid
= ?” execute($uid);
ハンズオン 攻撃してみよう! https://contents.saitolab.org/taiken/
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
None
XSS(クロスサイトスクリプティング) 脆弱性のある実装 <div> 検索結果:<?php echo $keyword ?> </div> $keywordに以下を入れると? •
<script>alert("Bug!!!");</script> • <font color=“red”>
対策 • HTMLテキストの入力を許可しない • エスケープ処理 • バリデーション • 文字コードを指定 •
HTTPレスポンスヘッダに指定 • HTMLのMETA宣言部分に指定
対策 修正済みの実装(エスケープ処理) <div> 検索結果:<?php echo htmlspecialchars($keyword, ENT_QUOTES) ?> </div> HTMLエンティティ
補足 HTMLテキストの入力を許可したい場合は? • 機能で代替 • ホワイトリスト方式 • ブラックリスト方式
ハンズオン 攻撃してみよう! https://contents.saitolab.org/taiken/
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
None
CSRF(クロスサイト・リクエスト・フォージェリ) 脆弱性のある実装 (フロント側) <form action="commit.php" method="post"> <input type="hidden" name="new_name" value="脆弱
太郎"> <input type=“hidden” name=“new_address” value=“東京都”> <input type="submit" name="commit" value="実行"> </form> (サーバ側) if( ! $_SESSION['authenticated'] ) { exit(); } update_userinfo( $_SESSION['uid'], $_POST['new_name'], $_POST['new_address']);
CSRF(クロスサイト・リクエスト・フォージェリ) 攻撃用のサイト <form action="http://◦◦/commit.php" method="post" name="f1"> <input type=“hidden” name=“new_name” value=“攻撃者">
<input type=“hidden” name=“new_address” value=“大阪府"> </form> <script> document.forms['f1'].submit(); </script>
対策 • 指定のフォームを利用して投稿していることを確認する 1. セッション開始時にトークンを発行する 2. 送信用フォームにトークンをhidden要素で埋め込む 3. トークンをPOSTメソッドのリクエストで渡す 4.
トークンが正しいか検証する
対策 修正後の実装 (サーバ側/token発行時) $csrf_token = get_csrf_token(); //ランダムな文字列を生成 $_SESSION['csrf_token'] = $csrf_token;
(フロント側) <form action="commit.php" method="post"> <input type="hidden" name="new_name" value="脆弱 太郎"> <input type=“hidden” name=“new_address” value=“東京都"> <input type="hidden" name=”scrf_token" value=”<?=$csrf_token?>”> <input type="submit" name="commit" value="完了"> </form> (サーバ側/リクエスト受取時) if( ! $_SESSION['authenticated'] ) { exit(); } if($_POST[‘scrf_token’]!=$_SESSION['csrf_token']) { exit(); } update_userinfo($_SESSION['uid'],$_POST['new_name'], $_POST['new_address']);
ハンズオン 攻撃してみよう! https://contents.saitolab.org/taiken/
実装時における対策 1. SQL インジェクション 2. XSS(クロスサイト・スクリプティング) 3. CSRF(クロスサイト・リクエスト・フォージェリ) 4. セッションハイジャック
セッションハイジャック • セッションIDの推測 • セッションIDの盗用 • セッションIDの固定化
None
None
None
対策 • セッションIDを推測困難にする • セッションIDをURLパラメータに格納しない • HTTPSのCookieはsecure属性を加える • ログイン成功後に新しいセッションを開始する •
セッションID以外の秘密情報を関連づけて管理する
その他の攻撃など • OS コマンド・インジェクション • HTTP ヘッダ・インジェクション • クリックジャッキング •
バッファオーバーフロー • Dos/DDos攻撃 • ゼロデイ攻撃 • バックドア • フィッシング • ディレクトリ・トラバーサル
補足 構築時におけるセキュリティ • ポートフォワード • ファイアウォール • DMZ • アクセス制限
補足 運用時におけるセキュリティ • 各ツール/バージョンの脆弱性 • 監査 • ソーシャルハッキング • PCロック、紛失防止、USB禁止
参考 • 安全なウェブサイトの作り方:IPA 独立行政法人 情報処理推 進機構 • 体系的に学ぶ 安全なWebアプリケーションの作り方 •
OWASP Top10 • CVE Details • 「世界最悪のログイン処理コード」を解説してみた - Qiita