お助けページ
うまくいかないのは、あなたのせいではなく教材の説明が足りていないせいです。5分試してダメなら、遠慮なくここを使って先に進んでください。
よくあるつまずき
ファイルをブラウザにドラッグしても何も表示されません
ファイル名が index.html になっているか確認してください。メモ帳などで作ると index.html.txt になっていることがあります。VS Code で作り直すのが確実です。
書いたはずの文章がブラウザに出てきません
保存できていない可能性が高いです。VS Code のタブに小さな丸印が付いていたら未保存です。Mac は command + S、Windows は Ctrl + S で保存してから、ブラウザを再読み込みしてください。
文字が「縺ゅ↑縺・」のように化けます
head の中に <meta charset="UTF-8" /> があるか確認してください。この1行が抜けていると日本語が化けます。
5分やってもうまくいきません
その章のスナップショットZIPをダウンロードして、そこから再開してください。戻しかたはコースによって違うので、下の「ZIPから再開する手順」を先に読んでください。詰まったまま止まるより、先に進んだほうが必ず身につきます。
章ごとのファイル一式
各章を終えた時点の完成ファイルです。ダウンロードすれば、その章の続きから再開できます。
ZIPから再開する手順
コース1のZIP(HTMLだけ)は、解凍したファイルで自分のフォルダをそのまま置き換えれば動きます。
コース2のZIP(npmを使うプロジェクト)は、置き換えただけでは起動しません。次の3行が必要です。
- ZIPを解凍する
- 解凍したフォルダの中で
npm install - 同じ場所で
npm run dev
コース2は、丸ごと置き換える前にひと呼吸。上書きすると src/places.ts(自分の行き先データ)と、自分で書き換えた文言がすべて消えます。 先にその2つをメモ帳などに貼って待避してください。そのうえで、壊れているファイルだけを差し替えるのが第一手です。 それでも直らないときに、丸ごと置き換えてください。
はじめての自分サイト
JavaScript × TypeScript 同時学習
Python — 面倒ごとを自動化する
Go — 配れる道具を一瞬で作る
Git / GitHub — 作品に歴史と住所を与える
Linux コマンド — 黒い画面を自分の道具にする
React Native — 自分のスマホで動くアプリ
Ruby — 書き心地を味わう
Rust — コンパイラと二人三脚で書く
C++ — コンピュータの素顔に触れる
セキュリティの法と倫理
- 第0章 はじめに — なぜ最初に線を引くのか配布物なし
- 第1章 不正アクセス禁止法 — 分岐点は「承諾」配布物なし
- 第2章 著作権 — 自分が守る側になる配布物なし
- 第3章 刑法168条の2・3 — この教材が扱わない線配布物なし
- 第4章 責任ある開示 — 穴を見つけたあと配布物なし
- 第5章 まとめ — 実習前の3つの問い配布物なし
責任ある開示を書く
- 第0章 はじめに — 見つけたら、終わりではない配布物なし
- 第1章 見つけたあとの3つの禁 — 追試・公表・持ち出し配布物なし
- 第2章 日本の届け先 — 早期警戒パートナーシップ配布物なし
- 第3章 良い報告書の要素 — 相手が今日から動ける配布物なし
- 第4章 模擬報告を書く — 型に沿って、手元で配布物なし
- 第5章 まとめ — 見つけて終わりにしない配布物なし
ツール導入とライセンスの読み方
- 第0章 はじめに — なぜ同梱しないのか配布物なし
- 第1章 公式導線で入れる — 出どころと真正性配布物なし
- 第2章 ライセンスの読み方 — OSS と無償プロプラ配布物なし
- 第3章 使う前の確認 — 権限・向ける先・記録配布物なし
- 第4章 まとめ — 道具を、自分の足で配布物なし
CTF のルールと writeup の作法
- 第0章 はじめに — 許された環境にも、線はある配布物なし
- 第1章 競技規約の読み方 — 参加ボタンの前に配布物なし
- 第2章 フラグとフェアプレー — 共有しない・持ち出さない配布物なし
- 第3章 転載しない writeup — 自分の言葉で書く配布物なし
- 第4章 まとめ — 気持ちよく、旗を取りに行く配布物なし
自分だけの脆弱ターゲットを作る
- 第0章 はじめに — 作ると、見えるようになる配布物なし
- 第1章 アイデアと実装を分ける — 設計ノート配布物なし
- 第2章 一本、設計する — 一つの穴を持つ最小ターゲット配布物なし
- 第3章 公開しない — 127.0.0.1 に閉じる配布物なし
- 第4章 まとめ — 作る側の目を持って配布物なし
Web はどう壊れるか — 15分の脆弱性試食
- 第0章 はじめに — 隔離された枠の中で壊す配布物なし
- 第1章 DOM XSS — 入力がコードになる瞬間配布物なし
- 第2章 JWT デコード — 暗号化ではない配布物なし
- 第3章 クライアント任せの権限 — 隠すは守りにならない配布物なし
- 第4章 まとめ — 試食から、道へ配布物なし
HTTP を手で話す — リクエストの解剖
- 第0章 はじめに — 検査用サーバを立てる配布物なし
- 第1章 リクエストの解剖 — メソッド・パス・ヘッダ配布物なし
- 第2章 Cookie とボディ — POST で送る配布物なし
- 第3章 少しずつ変えて送る — Repeater の発想配布物なし
Burp Suite 最初の一歩
- 第0章 はじめに — Burp とは何か、何を入れるか配布物なし
- 第1章 プロキシを通す — ブラウザ → Burp → ターゲット配布物なし
- 第2章 CA 証明書の壁 — HTTPS を読む配布物なし
- 第3章 スコープ — 倫理を設定で守る配布物なし
C言語 — ポインタとメモリ
- 第0章 はじめに — メモリという、1本の連続した空間配布物なし
- 第1章 変数はメモリのバイト列 — アドレスとポインタ配布物なし
- 第2章 配列とポインタ演算配布物なし
- 第3章 文字列とバッファ — C に境界チェックは無い配布物なし
- 第4章 バッファオーバーフローを観察する(最終章)配布物なし
- 第5章 まとめ — メモリという、共通の土台配布物なし
コンピュータのしくみ — アセンブリで読む CPU とスタック
- 第0章 はじめに — 読むための、アセンブリ配布物なし
- 第1章 基本の文法 — レジスタと、基本命令配布物なし
- 第2章 呼出規約とスタックフレーム — 関数はどう呼ばれるか配布物なし
- 第3章 条件分岐とループを読む配布物なし
- 第4章 まとめ — 読む力を、CTFの入口に配布物なし
バイナリを覗く
- 第0章 はじめに — バイナリは、読めないものではない配布物なし
- 第1章 先頭数バイトが、正体を語る配布物なし
- 第2章 文字列は、コンパイルされても消えない配布物なし
- 第3章 readelfで、ELFヘッダーを読む配布物なし
- 第4章 まとめ — 4つの道具で、バイナリの姿を掴む配布物なし
システムコールを覗く
- 第0章 はじめに — プログラムとOSの、境界線配布物なし
- 第1章 write(2)だけのhelloを、straceで見る配布物なし
- 第2章 write()という、依頼の中身を読む配布物なし
- 第3章 まとめ — OSとの境界を、覗く目配布物なし
プロセスと仮想メモリ
- 第0章 はじめに — プロセスは、動いている実体配布物なし
- 第1章 ps と /proc で、動いているプロセスを見る配布物なし
- 第2章 /proc/PID/maps と、ASLRの正体配布物なし
- 第3章 シグナル — プロセスへの割り込み配布物なし
- 第4章 まとめ — プロセスという、動いている実体配布物なし
パケットを手で見る
- 第0章 はじめに — 通信も、覗ける配布物なし
- 第1章 HTTPを、覗いて、手で話す配布物なし
- 第2章 自分だけの、ミニtcpdumpを書く配布物なし
- 第3章 まとめ — 通信も、読み解ける配布物なし
Web セキュリティの土台(旗艦)
- 第0章 はじめに — やられアプリを手元で起動する配布物なし
- 第1章 反射XSS — 攻めて、直して、再検証する配布物なし
- 第2章 IDOR — 持ち主を確かめずに返す穴配布物なし
- 第3章 オープンリダイレクト — 行き先を確かめない穴配布物なし
- 第4章 まとめ — 3つの穴が言う1つのこと配布物なし
インジェクションを体で覚える
- 第0章 はじめに — 注入は、境界の崩壊配布物なし
- 第1章 XSS 三種 — 反射・保存・DOM配布物なし
- 第2章 SQL インジェクション — 入力が、SQL になる配布物なし
- 第3章 コマンドインジェクション — 入力が、コマンドになる配布物なし
- 第4章 SSTI とパストラバーサル — 式とパスの越境配布物なし
- 第5章 まとめ — 五つの穴を、一つの原則に配布物なし
アクセス制御と認可の壊れ方
- 第0章 はじめに — ツールが苦手な、高価値の穴配布物なし
- 第1章 水平の穴 — 他人の資源に、手が届く配布物なし
- 第2章 垂直の穴 — 上位権限に、手が届く配布物なし
- 第3章 直す — 集中管理と、既定拒否配布物なし
- 第4章 まとめ — 2軸で探し、集中して守る配布物なし
サーバサイドの深い穴
- 第0章 はじめに — サーバの内側で起きること配布物なし
- 第1章 SSRF — サーバに、内部への使いを頼む配布物なし
- 第2章 SSRF の修正 — 許可リストと、内部IPの遮断配布物なし
- 第3章 安全でないデシリアライズ — 復元が、実行になる瞬間配布物なし
- 第4章 まとめ — サーバの内側を、締める配布物なし
API と GraphQL の診断
- 第0章 はじめに — 1つの窓口に、すべてが集まる配布物なし
- 第1章 Introspection — 地図そのものが、漏れる配布物なし
- 第2章 BOLA — リゾルバの、所有者チェック漏れ配布物なし
- 第3章 BFLA と mass assignment配布物なし
- 第4章 直す — フィールド単位の認可と、入力の許可リスト配布物なし
- 第5章 まとめ — 窓口が1つでも、原則は同じ配布物なし
ビジネスロジックと競合状態
- 第0章 はじめに — ツールが、原理的に見つけられない領域配布物なし
- 第1章 業務ロジックの穴 — クライアントを、信じない配布物なし
- 第2章 競合状態 — 確認と実行の、隙間を突く配布物なし
- 第3章 競合状態の修正 — 確認と実行を、1つにする配布物なし
- 第4章 まとめ — 当たり前を、疑う目配布物なし
同一オリジンポリシーと CORS
- 第0章 はじめに — オリジンという、ブラウザの国境配布物なし
- 第1章 同一オリジンポリシー — 国境を、見る配布物なし
- 第2章 CORS の基本 — サーバが開ける窓口配布物なし
- 第3章 誤設定の危うさ — 反射 + 資格情報配布物なし
- 第4章 まとめ — 壁と、窓と、開けすぎ配布物なし
セキュリティヘッダーと CSP
- 第0章 はじめに — ブラウザへの、指示書配布物なし
- 第1章 ヘッダーの顔ぶれ — このサイトの守り配布物なし
- 第2章 CSP を読む — 本物のポリシーを、指令ごとに配布物なし
- 第3章 CSP が XSS をどう止めるか — 有無で見比べる配布物なし
- 第4章 まとめ — 指示書で、守りを一段配布物なし
認証とセッションの診断
- 第0章 はじめに — ログインの、その後配布物なし
- 第1章 セッションID と Cookie 属性 — 器を、締める配布物なし
- 第2章 セッション固定 — 掴まされた合言葉配布物なし
- 第3章 CSRF — 意図しない操作を、させられる配布物なし
- 第4章 OAuth / OIDC — 認可コードフローと、その綻び配布物なし
- 第5章 まとめ — 「あなた」を運ぶ仕組みを、守る配布物なし
JWT を分解する
- 第0章 はじめに — トークンを、開けてみる前に配布物なし
- 第1章 分解する — 3つの部品と、読める中身配布物なし
- 第2章 署名と検証 — 改ざんを止めているもの配布物なし
- 第3章 危うい実装 — alg:none・alg 混同・弱い鍵配布物なし
- 第4章 まとめ — 読める・止める・甘くなる配布物なし
脆弱性診断の歩き方 — 報告書まで
- 第0章 はじめに — 売られているのは、報告書配布物なし
- 第1章 スコープの確認と偵察 — 見てよい範囲を、確定する配布物なし
- 第2章 発見から、再現手順を固める配布物なし
- 第3章 影響評価 — 重大度を、決める配布物なし
- 第4章 報告書を書く — 実務レベルのフルテンプレ配布物なし
- 第5章 まとめ — 提出のあと、そして一巡配布物なし
ソースコード診断入門
- 第0章 はじめに — 動かさずに、読む配布物なし
- 第1章 source と sink のカタログ配布物なし
- 第2章 追いかける — 初見のコードで、実際にやってみる配布物なし
- 第3章 差分を読む — 直る前後の、形を覚える配布物なし
- 第4章 読むだけでは、分からないこと配布物なし
- 第5章 まとめ — 読む力を、実務の道具に配布物なし
作らせない側 — セキュアコーディング
- 第0章 はじめに — 直す側の知識を、物差しにする配布物なし
- 第1章 原則1 — データとコードを、混ぜない配布物なし
- 第2章 原則2 — 信じるものを、明示する配布物なし
- 第3章 原則3 — 状態と身元を、正しく守る配布物なし
- 第4章 原則4 — 多層防御。1つのミスが、全滅にならない配布物なし
- 第5章 まとめ — 物差しを、次のコースで使う配布物なし
依存関係の脆弱性 — SCA 入門
- 第0章 はじめに — 依存も、あなたのコードの一部配布物なし
- 第1章 npm audit — 既知の脆弱な依存を見つける配布物なし
- 第2章 lockfile — 再現性と、整合性ハッシュ配布物なし
- 第3章 typosquatting — 名前のなりすまし配布物なし
- 第4章 まとめ — 依存関係というサプライチェーン配布物なし
スマホアプリ診断入門
- 第0章 はじめに — 静的解析という、軽量な入口配布物なし
- 第1章 標的を立てる — smaliソースから、練習用APKをビルドする配布物なし
- 第2章 ハードコードされた秘密を見つける配布物なし
- 第3章 マニフェストの誤設定を見つける配布物なし
- 第4章 直す — 秘密を抜き、マニフェストを締める配布物なし
- 第5章 まとめ — 静的解析の先にあるもの配布物なし
Firebase の落とし穴
- 第0章 はじめに — 守るのは、鍵ではなくルール配布物なし
- 第1章 開いたルール — 認証なしで、読み書きする配布物なし
- 第2章 ルールを締める — 認証と所有者を要求する配布物なし
- 第3章 まとめ — BaaSでも、認可の原則は変わらない配布物なし
CTF 入門 — 安全に始めて旗を立てる
- 第0章 はじめに — CTF の安全ゲート配布物なし
- 第1章 自作 CTF を起動する — secret-notes-ctf配布物なし
- 第2章 偵察 — 「おかしい所」を探す配布物なし
- 第3章 詰まったとき — 答えを見ずに進む配布物なし
- 第4章 記録に残す — writeup と、次の場所配布物なし
Web の穴を見つけて旗を取る
- 第0章 はじめに — 旗探しの、別の流儀配布物なし
- 第1章 旗A — ソースに残された、手がかり配布物なし
- 第2章 旗B — パラメータを信じた、昇格配布物なし
- 第3章 まとめ — 2つの目を、持ち歩く配布物なし
弱い暗号を解いて旗を取る
- 第0章 はじめに — 「暗号化」を、疑う配布物なし
- 第1章 鍵の使い回し — XOR暗号を、既知平文で崩す配布物なし
- 第2章 予測できる乱数 — 「ランダム」の中身を、疑う配布物なし
- 第3章 まとめ — 中身を、確かめる目配布物なし
プログラムを読み解いて鍵を暴く
- 第0章 はじめに — 動かす前に、読む配布物なし
- 第1章 クラックミーを、自分でビルドする配布物なし
- 第2章 逆アセンブルを読んで、正解を計算する配布物なし
- 第3章 まとめ — 読んでから、動かす配布物なし
自作バイナリで教育目的にメモリを操る
- 第0章 はじめに — このコースの一線配布物なし
- 第1章 脆弱なプログラムを作り、書き換え位置を読む配布物なし
- 第2章 リターンアドレスを書き換えて、win関数に飛ばす配布物なし
- 第3章 まとめ — 保護は、何を防いでいたか配布物なし
残されたデータから真相を掘り出す
- 第0章 はじめに — 「見えている情報」だけが全てじゃない配布物なし
- 第1章 ファイルの終わりの、その先 — carving配布物なし
- 第2章 ピクセルの、最下位の1ビット — steganography配布物なし
- 第3章 パケットも、結局はバイト列 — pcap配布物なし
- 第4章 まとめ — ファイル形式を、読む目配布物なし
檻(jail)を破り符号を解く
- 第0章 はじめに — 分類されない問題たち配布物なし
- 第1章 pyjailを、破る配布物なし
- 第2章 エンコードの、玉ねぎ配布物なし
- 第3章 まとめ — 「制限したつもり」を、疑う配布物なし
実戦ワークフロー(triage→hints→writeup)
- 第0章 はじめに — このコースは、問題を出さない配布物なし
- 第1章 triage — 最初の10分で、何を解くか決める配布物なし
- 第2章 hints — 時間との交換に、負けはない配布物なし
- 第3章 writeup — 解けた瞬間を、言葉に残す配布物なし
- 第4章 まとめ — 実戦へ配布物なし
自作して直す(防御的capstone)
- 第0章 はじめに — 攻めた後は、直す番配布物なし
- 第1章 まず、再現する配布物なし
- 第2章 原因に、対処する配布物なし
- 第3章 同じexploitが、失敗することを確かめる配布物なし
- 第4章 まとめ — 攻めた分だけ、直せる配布物なし
TSエラー語辞典
各章で実際に出たエラー文の索引です。
第0章 準備
| エラー英文 | 言っていること |
|---|---|
command not found: node | Node.jsがまだ見えていません。ターミナルを開き直してください(VS Codeなら本体ごと) |
第1章 TSとの出会い
| エラー英文 | 言っていること |
|---|---|
Parameter 'x' implicitly has an 'any' type | xが何者か教えてください(注釈が要る場所の合図) |
'greeting' is possibly 'null' | それは無いかもしれません。あると保証するか、確かめてください |
Type 'number' is not assignable to type 'string' | そこは文字列の席です |
第2章 オブジェクトと型
| エラー英文 | 言っていること |
|---|---|
Property 'nmae' does not exist on type 'Place' | Placeにnmaeという持ち物はありません。綴りを見てください |
Cannot find module './places' | その場所にファイルが見つかりません。./ を忘れていませんか |
第3章 関数とDOMの型
| エラー英文 | 言っていること |
|---|---|
Object is possibly 'null' | それ、無いかもしれませんよ |
Property 'value' does not exist on type 'Element' | ただの部品には value がありません。種類を伝えてください |
第4章 ユニオンとナローイング
| エラー英文 | 言っていること |
|---|---|
Argument of type 'number | null' is not assignable to parameter of type 'number' | 失敗したときの null を、数しか受け取らない所へ渡しています |
'amount' is possibly 'null' | それ、nullかもしれません。先に確かめてください |
Type '"GBP"' is not assignable to type 'Currency' | GBPはCurrencyの仲間ではありません |
第5章 非同期とfetch
| エラー英文 | 言っていること |
|---|---|
Type 'Promise<Rate[]>' is missing the following properties from type 'Rate[]' | それはまだ包みの中です。awaitで開けてください |
TypeError: rows.find is not a function | (Consoleに出る方)包みのまま中身を触ろうとしています |
'await' expressions are only allowed within async functions | awaitを使うなら、その関数にasyncを付けてください |
第6章 公開①
| エラー英文 | 言っていること |
|---|---|
(この章に新しいエラー英文はありません) | 公開だけの章です |
第7章 unknownと型ガード
| エラー英文 | 言っていること |
|---|---|
'data' is of type 'unknown' | 中身を確かめるまで触れません |
Type 'unknown' is not assignable to type 'Place[]' | それが Place[] だという確認がまだです |
第8章 判別可能ユニオン
| エラー英文 | 言っていること |
|---|---|
Property 'data' does not exist on type '{ status: "loading"; }' | 読み込み中の便に荷物はまだ載っていません |
Type '"eror"' is not assignable to type '"loading" | "success" | "error"' | そのステータスは存在しません。綴りを見てください |
第9章 ジェネリクス
| エラー英文 | 言っていること |
|---|---|
Expected 1 type arguments, but got 0 | 山括弧の空欄を埋めてください(または推論に任せてください) |
Object is possibly 'undefined' | それは無いかもしれません。?. で受けてください |
第10章 ユーティリティ型とtsconfig
| エラー英文 | 言っていること |
|---|---|
Object is possibly 'undefined' | それは無いかもしれません(noUncheckedIndexedAccess実験の主役) |
Type 'string' is not assignable to type 'number' | そこは数値の席です(ビルド停止体験の主役) |
進捗データの持ち出し
進捗はこのブラウザの中だけに保存されています。別のパソコンで続けたいときは、書き出した文字列を貼り付けて引き継げます。
進捗を初期化する
チェックの状態がおかしくなったときや、最初からやり直したいときに使います。 このブラウザに保存された進捗だけが消えます。作ったサイトのファイルには影響しません。