flawopen.com/xss/Go

● CWE-79 · 高
セキュリティ研究 · FlawOpen

脆弱性の解説:Cross-Site Scripting in Go

Learn how to fix Cross-Site Scripting (XSS) (CWE-79) in Go. Side-by-side vulnerable vs secure code examples for html/template contextual escaping and Gin responses.

💡 わかりやすい解説 (ELI5)

オフィスの共有掲示板に「これを読んだ人は、隣の人に財布を渡してください」という貼り紙をする場面を例えに考えてみてください。もし通りかかった全員が掲示板の指示に無条件に従ってしまうと、貼り紙を出した人が全員の所持金を盗めてしまいます。

主要な概念と専門用語

Web Application Security
主要概念 (Web Application Security):Core architecture component affected by CWE-79.
CWE-79
主要概念 (CWE-79):Standard Common Weakness Enumeration classification for xss-go.
Defense-in-Depth
主要概念 (Defense-in-Depth):Multi-layered engineering verification and runtime boundary isolation.

ステップ・バイ・ステップの攻撃フロー

Step 1

悪意あるスクリプトの挿入

攻撃者がフォームやURLパラメータを通じてHTMLタグやJavaScript(例: <script> や <img onerror=...>)を挿入します。

Step 2

エスケープ処理のないHTMLレンダリング

アプリケーションが入力を適切なHTMLエンティティ化を行わずにページ内へ反映またはデータベースに保存します。

Step 3

ブラウザによるDOM解釈とスクリプト実行

被害者がページを読み込んだ際、ブラウザが挿入されたテキストを実行可能なスクリプトとして解釈します。

Step 4

セッションハイジャックと資格情報窃取

被害者の権限下でスクリプトが動作し、認証CookieやlocalStorageのトークンを攻撃者サーバーへ送信します。

ソースコード比較:脆弱 vs 堅牢化

✕ 脆弱な実装
// text/template does no HTML escaping
import "text/template"

t := template.Must(
  template.New("w").Parse(
    "<div>Welcome, {{.}}</div>"))
t.Execute(w, name)
✓ 堅牢化されたセキュアパッチ
// html/template escapes by context
import "html/template"

t := template.Must(
  template.New("w").Parse(
    "<div>Welcome, {{.}}</div>"))
t.Execute(w, name)

エンジニアリング&システム堅牢化チェックリスト

References