<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="/feed.rss.xml" type="text/xsl" media="screen"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>kuroneko</title>
    <description></description>
    <link>https://speakerdeck.com/kuroneko13</link>
    <atom:link rel="self" type="application/rss+xml" href="https://speakerdeck.com/kuroneko13.rss"/>
    <lastBuildDate>2026-07-15 12:18:51 -0400</lastBuildDate>
    <item>
      <title>入力を信じた瞬間、DBの中身もAWSの鍵も奪われる ── SQLi と SSRF を両フレームワークで塞ぐ</title>
      <description>「検索フォームの値をそのまま SQL につなぐ」「入力された URL の画像をサーバが取ってくる便利機能」。どちらも、入力を"実行"に混ぜた瞬間に牙をむきます。SQL インジェクション(SQLi)では DB の中身が、SSRF ではクラウド(AWS)の一時鍵まで奪われます。

社内エンジニア向けセキュリティ勉強会(全6回)の第2回です。Laravel と FuelPHP の両方で危険なコードと安全なコードを並べ、「入力はデータとして扱い、コード(SQL)や宛先(URL)から分離する」という一本の原則で、新旧どちらのフレームワークでも両脆弱性を塞ぎます。

重心を置く SSRF では、url= のような便利機能から 169.254.169.254(EC2 インスタンスメタデータ)を叩かせ、IMDSv1 経由で IAM の一時認証情報が丸見えになるまでを疑似デモで追跡します。そのうえで、基盤(IMDSv2)・アプリ(送信先 URL の検証)・権限・検知の多層防御へ落とし込みます。

扱うトピック
- SQLi:文字列連結／補間の危険性、プレースホルダによる分離、識別子(カラム名・並び順)は許可リストで(Laravel の whereRaw／DB::raw、FuelPHP の DB::query の穴と対策)
- SSRF:攻撃が効く理由(内部ネットワークの信頼を悪用)、EC2 メタデータ経由の IAM 鍵窃取、IMDSv1 と IMDSv2 の違い
- 対策:許可リスト・内部IP遮断・DNS解決後のIP検証・リダイレクト追従禁止、IMDSv2 の強制、そして多層で守る考え方

持ち帰る3つの結論
1. 入力はコードに混ぜない ＝ プレースホルダで分離する
2. 入力は宛先に混ぜない ＝ 送信先 URL を検証する
3. 基盤と入口の多層で守る ＝ IMDSv2 ＋ URL 検証

レガシー保守(FuelPHP 1.x)でも「明日からできる」棚卸しと設定確認まで示します。

想定読者:入力をそのまま実行に混ぜていた"ちょっと前の自分"。
分類:OWASP A03:2021 Injection / CWE-89、OWASP A10:2021 SSRF / CWE-918</description>
      <media:content url="https://files.speakerdeck.com/presentations/72f516cc9a73487e98a10502d1d42573/preview_slide_0.jpg?40061724" type="image/jpeg" medium="image"/>
      <content:encoded>「検索フォームの値をそのまま SQL につなぐ」「入力された URL の画像をサーバが取ってくる便利機能」。どちらも、入力を"実行"に混ぜた瞬間に牙をむきます。SQL インジェクション(SQLi)では DB の中身が、SSRF ではクラウド(AWS)の一時鍵まで奪われます。

社内エンジニア向けセキュリティ勉強会(全6回)の第2回です。Laravel と FuelPHP の両方で危険なコードと安全なコードを並べ、「入力はデータとして扱い、コード(SQL)や宛先(URL)から分離する」という一本の原則で、新旧どちらのフレームワークでも両脆弱性を塞ぎます。

重心を置く SSRF では、url= のような便利機能から 169.254.169.254(EC2 インスタンスメタデータ)を叩かせ、IMDSv1 経由で IAM の一時認証情報が丸見えになるまでを疑似デモで追跡します。そのうえで、基盤(IMDSv2)・アプリ(送信先 URL の検証)・権限・検知の多層防御へ落とし込みます。

扱うトピック
- SQLi:文字列連結／補間の危険性、プレースホルダによる分離、識別子(カラム名・並び順)は許可リストで(Laravel の whereRaw／DB::raw、FuelPHP の DB::query の穴と対策)
- SSRF:攻撃が効く理由(内部ネットワークの信頼を悪用)、EC2 メタデータ経由の IAM 鍵窃取、IMDSv1 と IMDSv2 の違い
- 対策:許可リスト・内部IP遮断・DNS解決後のIP検証・リダイレクト追従禁止、IMDSv2 の強制、そして多層で守る考え方

持ち帰る3つの結論
1. 入力はコードに混ぜない ＝ プレースホルダで分離する
2. 入力は宛先に混ぜない ＝ 送信先 URL を検証する
3. 基盤と入口の多層で守る ＝ IMDSv2 ＋ URL 検証

レガシー保守(FuelPHP 1.x)でも「明日からできる」棚卸しと設定確認まで示します。

想定読者:入力をそのまま実行に混ぜていた"ちょっと前の自分"。
分類:OWASP A03:2021 Injection / CWE-89、OWASP A10:2021 SSRF / CWE-918</content:encoded>
      <pubDate>Thu, 23 Jul 2026 00:00:00 -0400</pubDate>
      <link>https://speakerdeck.com/kuroneko13/ru-li-woxin-zitashun-jian-dbnozhong-shen-moawsnojian-moduo-wareru-sqli-to-ssrf-woliang-huremuwakudesai-gu</link>
      <guid>https://speakerdeck.com/kuroneko13/ru-li-woxin-zitashun-jian-dbnozhong-shen-moawsnojian-moduo-wareru-sqli-to-ssrf-woliang-huremuwakudesai-gu</guid>
    </item>
    <item>
      <title>認証は「誰か」までしか守らない�── オブジェクト単位の認可漏れが IDOR ──</title>
      <description>【社内セキュリティ勉強会 #1 認証・認可】の登壇資料です。

認証を通過しても、オブジェクト単位で認可を確認しなければ他人のデータは見えてしまう——「認証≠認可」を手を動かせる形で持ち帰る回です。

find($id) で取ったレコードを所有チェックせず返す、よくある実装がどう IDOR（安全でない直接オブジェクト参照 / BOLA / Broken Access Control）を生むのか。
URL の ID を1つ書き換えるだけの疑似デモで穴を体感し、「直接参照+認可チェックの欠落」という設計の言葉に翻訳。
最後に FuelPHP（認可がコントローラに散る＝分散・暗黙）と Laravel の Gate/Policy（1箇所に集約＝集中・明示）を対比します。

▼ 持ち帰る結論
① 認証は本人確認まで
② 取得できる ≠ 見てよい
③ 認可は1箇所に明示集約

想定読者は「認証は書けるが認可は曖昧だった、ちょっと前の自分」。全6回シリーズの第1回。</description>
      <media:content url="https://files.speakerdeck.com/presentations/9104d80e2cfa4297826c52f598879ff5/preview_slide_0.jpg?39998188" type="image/jpeg" medium="image"/>
      <content:encoded>【社内セキュリティ勉強会 #1 認証・認可】の登壇資料です。

認証を通過しても、オブジェクト単位で認可を確認しなければ他人のデータは見えてしまう——「認証≠認可」を手を動かせる形で持ち帰る回です。

find($id) で取ったレコードを所有チェックせず返す、よくある実装がどう IDOR（安全でない直接オブジェクト参照 / BOLA / Broken Access Control）を生むのか。
URL の ID を1つ書き換えるだけの疑似デモで穴を体感し、「直接参照+認可チェックの欠落」という設計の言葉に翻訳。
最後に FuelPHP（認可がコントローラに散る＝分散・暗黙）と Laravel の Gate/Policy（1箇所に集約＝集中・明示）を対比します。

▼ 持ち帰る結論
① 認証は本人確認まで
② 取得できる ≠ 見てよい
③ 認可は1箇所に明示集約

想定読者は「認証は書けるが認可は曖昧だった、ちょっと前の自分」。全6回シリーズの第1回。</content:encoded>
      <pubDate>Thu, 16 Jul 2026 00:00:00 -0400</pubDate>
      <link>https://speakerdeck.com/kuroneko13/ren-zheng-ha-shui-ka-madesikashou-ranai-obuziekutodan-wei-noren-ke-lou-rega-idor</link>
      <guid>https://speakerdeck.com/kuroneko13/ren-zheng-ha-shui-ka-madesikashou-ranai-obuziekutodan-wei-noren-ke-lou-rega-idor</guid>
    </item>
  </channel>
</rss>
