Appearance
XSS リスク ― v-html 104箇所。全部危険か?
この章のキーワード
| 用語 | 意味 | なぜ重要か |
|---|---|---|
| XSS | Cross-Site Scripting。悪意あるスクリプトをページに注入する攻撃 | Cookie 窃取やセッションハイジャック |
| v-html | Vue で HTML をエスケープなしで描画するディレクティブ | 便利だが XSS リスク |
| エスケープ | HTML タグを無害な文字列に変換すること | Vue の は自動エスケープ |
| サニタイズ | 危険な HTML タグやスクリプトを除去すること | v-html を安全に使う手段 |
Phase 1: 観察
LIBOT の Vue コンポーネントには v-html ディレクティブが 約 104 箇所 あります。
v-html は HTML をそのまま描画します。
vue
<!-- 危険な場合 -->
<p v-html="userInput"></p>
<!-- ユーザーが <script>alert('XSS')</script> を入力したら? -->
<!-- 安全な場合 -->
<p v-html="$t('welcome_message')"></p>
<!-- 翻訳ファイルの固定文字列。ユーザー入力は含まれない -->104 箇所の内訳(傾向):
| カテゴリ | 割合 | リスク |
|---|---|---|
| 翻訳文字列の描画 | 多い | 低 |
| リッチテキスト(管理者入力) | 中程度 | 中 |
| ユーザー入力の直接描画 | 少ない | 高 |
Phase 2: 判断
AI禁止ゾーン
- 104 箇所の v-html を 全て今すぐ排除 すべきですか?
- 危険な v-html と 安全な v-html をどう見分けますか?
- 優先的に対処 すべきはどの箇所ですか?
AIに聞く前に、自分の頭で考えてみましょう。
テキストを入力すると有効になります