標籤:

「每日一題」XSS 是什麼?

新人經常在不知不覺中寫出一個 XSS 漏洞,甚至連老司機也偶有濕鞋。

請用自己的語言簡述:

  1. XSS 是什麼(舉例說明)

  2. 如何防治 XSS

---------

XSS 是什麼?

是英文 Cross-Site Scripting 的縮寫。

簡單來說

1. 正常用戶 A 提交正常內容,顯示在另一個用戶 B 的網頁上,沒有問題。

2. 惡意用戶 H 提交惡意內容,顯示在另一個用戶 B 的網頁上,對 B 的網頁隨意篡改。

造成 XSS 有幾個要點:

1. 惡意用戶可以提交內容

2. 提交的內容可以顯示在另一個用戶的頁面上

3. 這些內容未經過濾,直接運行在另一個用戶的頁面上

舉例說明

假設我們有一個評論系統。

用戶 A 提交評論「小谷你好」到伺服器,然後用戶 B 來訪問網站,看到了 A 的評論「小谷你好」,這裡沒有 XSS。

惡意用戶 H 提交評論「<script>console.log(document.cookie)</script>」,然後用戶 B 來訪問網站,這段腳本在 B 的瀏覽器直接執行,惡意用戶 H 的腳本就可以任意操作 B 的 cookie,而 B 對此毫無察覺。有了 cookie,惡意用戶 H 就可以偽造 B 的登錄信息,隨意訪問 B 的隱私了。而 B 始終被蒙在鼓裡。

XSS 的成因以及如何避免

繼續上面例子,之所以惡意腳本能直接執行,有兩個可能

1. 後台模板問題

<p>n評論內容:<?php echo $content; ?>n</p>n

$content 的內容,沒有經過任何過濾,原樣輸出。

要解決這個原因,只需要後台輸出的時候,將可疑的符號 < 符號變成 < (HTML實體)就行。

2. 前端代碼問題

$p.html(content)n

或者

$p = $(<p>+ content +</p>)n

content 內容又被原樣輸出了。解決辦法就是不要自己拼 HTML,盡量使用 text 方法。如果一定要使用 HTML,就把可疑符號變成 HTML 實體。

示例代碼

以上,就是 XSS 的簡單介紹。

更多前端知識,盡在前端交流 4 群:392054247


推薦閱讀:

了解黑客:這是黑客思維
XSS常見攻擊與防禦
記一次沒什麼技術含量的XSS注入
XSS學習之以關點面 11~15關

TAG:XSS |