コース目次 / 第5章
まとめ — 五つの穴を、一つの原則に
XSS・SQLi・コマンド・SSTI・パストラバーサルを、データとコードを混ぜないという一つの原則に畳みます。パラメータ化・文脈別エスケープ・許可リストを持って、認可のコースへ進みます。
XSS の三種、SQL、コマンド、SSTI、パストラバーサル。五つの穴を、起こす側と直す側を対にして回りました。最初はばらばらに見えたはずのこれらが、いま一つの形に見えているはずです。
一つの原則に畳む
すべての注入は、「信頼できないデータが、別の言語のコードとして解釈される」ことで起きる。
・XSS → HTML/JS の層で
・SQLi → SQL の層で
・コマンド → シェルの層で
・SSTI → テンプレートの層で
・パストラバーサル → ファイルパスの層で
層が違うだけで、形は同じ。だから直しも、一つの原則に畳めます——データとコードを、混ぜない。
直しの型・早見表
| 注入 | 本命の直し | 発想 |
|---|---|---|
| XSS | 文脈別の出力エスケープ(+CSP) | 出す先の文法に合わせて無害化 |
| SQLi | パラメータ化(プレースホルダ ?) |
値を別ルートで渡す |
| コマンド | シェルを介さない / 引数配列で渡す | 値を別ルートで渡す |
| SSTI | テンプレは固定、入力は渡す変数に | ソースに混ぜない |
| パストラバーサル | 許可リスト(基準ディレクトリ配下だけ) | 収まるものだけ許す |
三つの道具に集約できます——パラメータ化(SQL・コマンド:値を別ルートで渡す)、文脈別エスケープ(XSS:出す先で無害化)、許可リスト(パス・リダイレクト:収まるものだけ許す)。この三つを持っていれば、はじめて出会う注入でも「これはどの層で、データがコードになっているか?」と問うて、対応する直しを選べます。
一貫して効く、もう一つの姿勢
注入対策で共通してダメだった直し方も、押さえておきます。
「危ない文字を探して消す」(ブラックリスト)は、必ず抜ける。’ を消しても別のエンコードが残り、.. を消しても ….// が残り、&& を消しても ; が残る。攻撃者の発想は無限で、禁止リストは後追いだから。
だからいつも「安全なものだけ許す/そもそも混ざらない仕組みに乗せる」。パラメータ化も許可リストも、この前向きの発想でした。
次の道 — アクセス制御と認可の壊れ方
次は「アクセス制御と認可の壊れ方」です。旗艦で触れた IDOR を入口に、「誰が・何をしてよいか」の仕組み(認可)が、どう設計され・どう壊れるかを体系的に扱います。注入が「入力の中身」の問題だったのに対し、認可は「その人にその権利があるか」の問題——Web セキュリティのもう一つの大きな柱です。
ここまでの実習も、相手は自分の 127.0.0.1 の自作やられだけでした(法と倫理)。強い攻撃を学ぶほど、この線を引き続けられることが効いてきます。
お疲れさまでした。あなたはもう、五つの注入を一つの目で見られます。そして、それぞれを直せる手を持っています。
こうなっていればOK
この章で卒業です。
この章はまだ完了していません。
保存できませんでした(プライベートブラウズ中かもしれません)。この端末に進捗は残りませんが、先へは進めます。