Cross-Site Scripting(跨站腳本攻擊)簡稱 XSS,是一種代碼注入攻擊。攻擊者經過在目標網站上注入惡意腳本,使之在用戶的瀏覽器上運行。利用這些惡意腳本,攻擊者可獲取用戶的敏感信息如 Cookie、SessionID 等,進而危害數據安全。
爲了和 CSS 區分,這裏把攻擊的第一個字母改爲了 X,因而叫作 XSS。
XSS 的本質是:惡意代碼未通過濾,與網站正常的代碼混在一塊兒;瀏覽器沒法分辨哪些腳本是可信的,致使惡意腳本被執行。前端
當瀏覽器請求 http://xxx/search?keyword="><script>alert('XSS');</script>
時,服務端會解析出請求參數 keyword
,獲得 "><script>alert('XSS');</script>
,拼接到 HTML 中返回給瀏覽器。造成了以下的 HTML:瀏覽器
<div> 您搜索的關鍵詞是:"><script>sendToMe(document.cookie);</script> </div>
這樣瀏覽器就會執行咱們注入的惡意代碼,咱們誘導他人訪問咱們構造的連接,就會把他人訪問頁面的部分信息發送給個人服務器安全
好比一個網站的文章能夠發表評論。
你登陸後獲取了cookie而後評論。
而後輸入評論內容: 2222<script>alert(XSS)</script>
惡意腳本未經轉換,存儲到了後臺。任何用戶訪問此頁面,都會執行惡意腳本。
致使每一個用戶在看這篇文章的時候就都彈出XSS彈框服務器
客戶端的腳本程序能夠動態地檢查和修改頁面內容,而不依賴於服務器端的數據。可能引發dom型xss的:使用innerHTML, documen.write屬性...
DOM 型 XSS 跟前兩種 XSS 的區別:DOM 型 XSS 攻擊中,取出和執行惡意代碼由瀏覽器端完成,屬於前端 JavaScript 自身的安全漏洞,而其餘兩種 XSS 都屬於服務端的安全漏洞。cookie
<input type="text" id="input"> <button id="btn">Submit</button> <div id="div"></div> <script> const input = document.getElementById('input'); const btn = document.getElementById('btn'); const div = document.getElementById('div'); let val; input.addEventListener('change', (e) => { val = e.target.value; }, false); btn.addEventListener('click', () => { div.innerHTML = `<a href=${val}>testLink</a>` }, false); </script>
上面若是某個網站有這樣的代碼咱們能夠直接在輸入框輸入onclick=alert(/xss/)
提交以後,頁面代碼就變成了:<a href onlick="alert(/xss/)">testLink</a>
dom