看懂 XSS:在網址列丟一段 code,網頁竟然真的執行了
你有沒有想過,網址列裡那串東西,網頁其實是會「讀」它的?
很多網站會把網址裡的參數,直接顯示在頁面上。舉個最常見的例子,一個搜尋頁。
你搜「貓」,網址會變成這樣:
example.com/search?q=貓
然後頁面上出現「你搜尋了:貓」。看起來超正常對吧。
但問題來了。如果我搜的不是「貓」,而是一段 HTML 呢?
example.com/search?q=<h1>哈囉</h1>
如果這個網站沒處理好,頁面上的「哈囉」就會變成一個超大的標題。因為網頁把我丟進去的東西,當成 HTML 渲染出來了。
那如果我丟的不是 <h1>,而是一段 JavaScript 呢?
example.com/search?q=<script>偷東西的程式碼</script>
這段 script,就會在「打開這個網址的人」的瀏覽器裡乖乖執行。這就是 XSS,跨站腳本攻擊。
為什麼這超可怕
因為那段程式碼,是用「受害者的身分」在跑的。它可以:
- 偷走他的登入狀態,直接變成他本人
- 幫他發文、改密碼、亂買東西
- 弄一個假的登入框,騙走他的帳號密碼
而你要做的,可能只是傳一個連結給他,等他點下去。
不是只有網址
輸入框也一樣。留言、暱稱、個人簡介,任何「你打字、網站顯示出來」的地方,只要網站沒處理好,都可能變成入口。差別只在於:
- 藏在網址裡的,要騙人點連結(一次性)
- 存進資料庫的(像留言),之後每個看到的人都會中(殺傷力更大)
一句話記住它
XSS 的本質,講穿了就一句:
網站把「使用者給的資料」,當成「程式碼」執行了。
你以為你只是在填搜尋框、留個言,但只要網站沒把你的輸入當成單純的文字,而是當成可以執行的 code,洞就開了。
想知道怎麼防?
這篇先讓你「看懂」它怎麼發生。如果你有在寫網站、想知道怎麼把這個洞補起來,看進階那篇:XSS 是什麼?一篇搞懂,以及怎麼防。
這篇你只要先記得一件事:你丟給網頁的東西,它可能會照單執行。
覺得太深?先看這幾篇入門好文
- 零基礎搞懂 XSS(Cymetrics) — 最白話的入門,從零開始講
- DVWA 實際打一次 XSS(Medium) — 動手在練習靶機實測,看得到效果
- 巴哈 Stored XSS 真實案例(cyku.tw) — 真實網站的儲存型 XSS 拆解
⬇ 免費《XSS 防禦速查表》
🔥 限時特價