iT邦幫忙

2026 iThome 鐵人賽

DAY 5
0

前言

工具的部分暫時歇一會,今天來聊點不一樣的,來介紹一下這個工具預計會掃哪些漏洞吧。

那今天先從 XSS 開始好了。

XSS 是什麼?

XSS 的全名是 Cross-Site Scripting,中文常稱為跨站腳本攻擊。當網站沒有妥善處理不可信的輸入,讓它成為頁面中可以執行的程式,就可能形成 XSS。

問題在於,這段程式是在目標網站的來源環境中執行。它可能修改頁面內容、讀取該頁面可存取的資料,或利用使用者現有的登入狀態發出請求。實際影響取決於頁面能存取的資源與使用者權限。

對我想做的工具而言,要掃描的大約像下面這樣:

使用者可控制的輸入
        ↓
網站如何處理這份輸入
        ↓
輸入被放進頁面的哪個位置
        ↓
瀏覽器把它當成文字,還是可執行的內容?

有哪些不同的 XSS?

XSS 大約分成下面三類:

名稱 關注的情況 例子
反射型 XSS 輸入隨當次請求進入回應,形成可執行內容 搜尋關鍵字被直接放進結果頁
儲存型 XSS 輸入被保存,之後顯示時形成可執行內容 留言被存下來,其他人開啟留言頁時受到影響
DOM 型 XSS 前端 JavaScript 把不可信資料送進危險的 DOM 操作 讀取網址中的資料,再透過 innerHTML 插入頁面

直接拼接輸入,會發生什麼事?

假設後端使用下面這種寫法,再把產生的字串當成 HTML 回傳:

# 教學示意:q 是從請求取得的字串。
html = f"<p>搜尋關鍵字:{q}</p>"

這段程式把 q 直接放進 HTML,沒有處理輸入中的特殊字元。

假設輸入是 <b>hello</b>,組出的內容就會是:

<p>搜尋關鍵字:<b>hello</b></p>

瀏覽器會把 <b> 當成標籤,將 hello 顯示為粗體。這個例子說明輸入已經能影響 HTML 結構,但還沒有展示 JavaScript 執行,因此不能只憑粗體效果就宣稱已確認 XSS。

反射型 XSS 的判斷還要往下追:攻擊者能否控制輸入,讓它在實際頁面情境中成為可執行的程式?這取決於輸入位置、網站如何處理字元,以及瀏覽器套用的限制。

輸入出現的位置,也會影響判斷

同樣一個 q,可能被放在不同位置:

<!-- 一般 HTML 文字內容 -->
<p>搜尋關鍵字:使用者輸入</p>

<!-- HTML 屬性值 -->
<input value="使用者輸入">

<!-- JavaScript 字串 -->
<script>
  const keyword = "使用者輸入";
</script>

這些位置有不同的語法規則,因此不能用同一套字元替換方式處理所有情境。尤其應避免把不可信輸入直接插入 JavaScript 程式碼;如果只需要顯示文字,就讓它留在文字內容中。

工具要收集什麼,才有辦法判斷?

回到 AI Web Security Agent,我會把後續的檢查規劃成幾個階段:

階段 需要保留的資料 能支持的觀察
找到輸入點 表單、路徑與參數 哪些位置可以提供輸入
追蹤輸入 測試請求與對應回應 輸入是否出現在回應中
分析輸出位置 反射位置附近的 HTML 或程式碼 輸入所處的語法情境與處理方式
驗證瀏覽器行為 測試條件、操作與可重現的執行結果 該案例是否能造成非預期程式執行

這是預計加入的能力。目前的對話工具還沒有完成這些自動驗證。

我會先讓程式保存證據,再讓 AI 整理觀察與下一步。只有表單時,記錄輸入點;只有反射時,記錄反射位置;缺少執行證據時,保留待驗證狀態。

Day 5 簡單的總結

今天稍微介紹了 XSS,並整理了 XSS 的形成過程。

後續分析時,我要確認輸入從哪裡進來、如何被處理、放進頁面的哪個位置,以及瀏覽器最後如何解讀它。這些問題都有對應證據後,工具才有基礎做出更可靠的判斷。

那就……

明天見!


上一篇
Day 04 | 串了API之後,原本Studio的功能都還在嗎
下一篇
Day 6|如果AI用來整理報告,那製作出來的工具能測到漏洞嗎
系列文
30 天打造 AI Web Security Agent:從 Google AI Studio 到 Gemini Agent 共 12 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言