Hello there, ('ω')ノ
そもそもテンプレートエンジンとは?
社内システムでもよく使われている技術で、画面表示を組み立てるときにこういった記述を使います。
例:
<p>ようこそ、{{ user_name }}さん</p>
この{{ user_name }}の部分をシステムが自動で「山田太郎」などに置き換えています。
テンプレートインジェクションが起こる流れ
- 本来はユーザー名や入力内容だけを反映する
- ところが、{{ 7*7 }} などコードっぽい入力をすると
- 「49」と計算された結果が画面に表示される場合があります
これがテンプレートインジェクションです。
実際のチェック手順① 入力欄を探す
以下のような場所を探します:
- 検索フォーム
- お問い合わせフォーム
- ユーザー名登録欄
実際のチェック手順② テスト入力を試す
次のような入力を試してみます:
- {{7*7}}
- {{1337+1}}
- {{request}}
- {{config}}
✅ 観察ポイント:
- 画面上に「49」や「1338」といった計算結果が表示されるか?
- 本来入力内容そのままのはずなのに、処理結果が変わってしまうか?
実務でのチェック例
社内アンケートシステム:
- 「ニックネーム」欄に {{7*7}} と入力
- 結果画面を確認 →「ようこそ、49さん」と表示される場合 → 脆弱性あり
よく使われるテンプレートエンジン例
- Jinja2(Python)
- Twig(PHP)
- ERB(Ruby)
- Handlebars(JavaScript)
いずれもWebシステムでよく使われるものです。
チェックリストまとめ
- [ ] 入力欄やURLパラメーターで{{7*7}}などを試したか?
- [ ] 画面表示内容に計算結果やコードが混ざらないか確認したか?
- [ ] 表示される内容と入力値が一致するかチェックしたか?
- [ ] 本番環境での実施前に必ず許可を取ったか?
注意事項
- 本番環境での実施は慎重に
- テスト環境や開発環境でのチェックを推奨
- 万が一発見した場合はすぐに開発担当へ連絡
まとめ
- テンプレートインジェクションは「表示用コードが動いてしまう」問題
- {{7*7}} など単純なテストで確認できる
- 入力内容がそのまま画面表示されるタイプのシステムは特に要注意
Best regards, (^^ゞ