「什麼情況才會有 XSS 產生呢?」
你可以很簡單的說當自己的網站上出現不是自己寫的 js 語法,
可能是留言板或是任何可以給使用者輸入「字串」的地方,
都有可能產生 XSS。
「XSS 聽說分成三種,可以說一下這三種有什麼差別嗎?」
反射、儲存跟 DOM,前兩種比較常見,
儲存型的比較好理解,基本上就是這個惡意的 xss 語法會留在伺服器當中,
最常見的就是留言板或是論壇可以留言的地方,
十年前的網站大部分都有這個問題,
基本上惡意的人只要將 <script>alert('xss')</script>
輸入進去留言板,
每一個人瀏覽這個網頁的時候就可能會彈出一個視窗上面寫 xss ,
這是因為網站把這個語法當作 js 直接執行,
順帶一提,現在的 google chrome 瀏覽器 會去預防 xss 的攻擊,
雖然還是有方法可以繞過。
既然儲存型會儲存在伺服器當中,那反射型就是不會被儲存的,
比如說很多可以搜尋的功能,他會把被搜尋的字串一起印在網頁當中,
那假設今天搜尋的字串可能是<script>alert('xss')</script>
,
如果這個網站將這個字串一起印在網頁當中並且執行了這段 js 語法,
那他可能就是有 xss 的弱點。
文件物件模型(Document Object Model, DOM)是 HTML、XML 和 SVG 文件的程式介面。
你可以想成這個技術讓我們可以透過 js 產生網頁內容不用透過伺服器。
DOM型XSS 就是我們請 js 產生網頁內容的時候被注入惡意字串。
這是一個來自 acunetix 的範例
<html>
<head>
<title>我是範例</title>
</head>
Hello ,
<script>
var pos=document.URL.indexOf("context=")+8;
document.write(document.URL.substring(pos,document.URL.length));
</script>
</html>
https://feifei.com.tw/example.html?context=Fei
他會印出 Hello, Fei
那當我們輸入一下惡意字串,這時候如果網頁直接執行那就是有 DOM 的 XSShttps://feifei.com.tw/example.html#context=<script>alert('xss')</script>