轉載:http://www.imooc.com/article/13553
XSS攻擊是什么XSS是跨站腳本攻擊的縮寫问畅,是一種網(wǎng)站應用程序的安全漏洞攻擊抬虽,是代碼注入的一種嚣州。
通常是通過利用網(wǎng)頁開發(fā)時留下的漏洞虎忌,通過巧妙的方法注入惡意指令代碼到網(wǎng)頁,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序椿疗。
這些惡意網(wǎng)頁程序通常是JavaScript漏峰,但實際上也可以包括Java,VBScript届榄,ActiveX浅乔,F(xiàn)lash或者甚至是普通的HTML。
攻擊成功后铝条,攻擊者可能得到更高的權限(如執(zhí)行一些操作)童擎、私密網(wǎng)頁內容、會話和cookie等各種內容攻晒。
XSS攻擊基本原理——代碼注入在web的世界里有各種各樣的語言,于是乎對于語句的解析大家各不相同班挖,有一些語句在一種語言里是合法的鲁捏,但是在另外一種語言里是非法的。這種二義性使得黑客可以用代碼注入的方式進行攻擊——將惡意代碼注入合法代碼里隱藏起來,再誘發(fā)惡意代碼给梅,從而進行各種各樣的非法活動假丧。只要破壞跨層協(xié)議的數(shù)據(jù)/指令的構造,我們就能攻擊动羽。歷史悠久的SQL注入
和XSS注入
都是這種攻擊方式的典范“悖現(xiàn)如今,隨著參數(shù)化查詢的普及运吓,我們已經離SQL注入
很遠了渴邦。但是,歷史同樣悠久的XSS
卻沒有遠離我們拘哨。XSS
的基本實現(xiàn)思路很簡單——比如持久型XSS
通過一些正常的站內交互途徑谋梭,例如發(fā)布評論,提交含有JavaScript
的內容文本倦青。這時服務器端如果沒有過濾或轉義掉這些腳本瓮床,作為內容發(fā)布到了頁面上,其他用戶訪問這個頁面的時候就會運行這些腳本产镐,從而被攻擊隘庄。
攻擊分類舉例反射型XSS
反射性XSS,也就是被動的非持久性XSS癣亚。誘騙用戶點擊URL帶攻擊代碼的鏈接丑掺,服務器解析后響應,在返回的響應內容中隱藏和嵌入攻擊者的XSS代碼逃糟,被瀏覽器執(zhí)行吼鱼,從而攻擊用戶。URL可能被用戶懷疑绰咽,但是可以通過短網(wǎng)址服務將之縮短菇肃,從而隱藏自己。
持久型XSS
也叫存儲型XSS——主動提交惡意數(shù)據(jù)到服務器取募,攻擊者在數(shù)據(jù)中嵌入代碼琐谤,這樣當其他用戶請求后,服務器從數(shù)據(jù)庫中查詢數(shù)據(jù)并發(fā)給用戶玩敏,用戶瀏覽此類頁面時就可能受到攻擊斗忌。可以描述為:惡意用戶的HTML或JS輸入服務器->進入數(shù)據(jù)庫->服務器響應時查詢數(shù)據(jù)庫->用戶瀏覽器旺聚。
DOM-based XSS
基于DOM的XSS织阳,通過對具體DOM代碼進行分析,根據(jù)實際情況構造dom節(jié)點進行XSS跨站腳本攻擊砰粹。
注:domxss取決于輸出位置唧躲,并不取決于輸出環(huán)境,因此domxss既有可能是反射型的,也有可能是存儲型的弄痹。dom-based與非dom-based饭入,反射和存儲是兩個不同的分類標準。
防范記住一句至理名言——“所有用戶輸入都是不可信的肛真⌒扯”(注意: 攻擊代碼不一定在<script></script>中)
使用XSS Filter
輸入過濾,對用戶提交的數(shù)據(jù)進行有效性驗證蚓让,僅接受指定長度范圍內并符合我們期望格式的的內容提交乾忱,阻止或者忽略除此外的其他任何數(shù)據(jù)。
輸出轉義凭疮,當需要將一個字符串輸出到Web網(wǎng)頁時饭耳,同時又不確定這個字符串中是否包括XSS特殊字符,為了確保輸出內容的完整性和正確性执解,輸出HTML屬性時可以使用HTML轉義編碼(HTMLEncode)進行處理寞肖,輸出到<script>中,可以進行JS編碼衰腌。
使用 HttpOnly Cookie
將重要的cookie標記為httponly新蟆,這樣的話當瀏覽器向Web服務器發(fā)起請求的時就會帶上cookie
字段,但是在js
腳本中卻不能訪問這個cookie右蕊,這樣就避免了XSS攻擊利用JavaScript
的document.cookie
獲取cookie
琼稻。
困難和幸運
真正麻煩的是,在一些場合我們要允許用戶輸入HTML饶囚,又要過濾其中的腳本帕翻。這就要求我們對代碼小心地進行轉義。否則萝风,我們可能既獲取不了用戶的正確輸入嘀掸,又被XSS攻擊。幸好规惰,由于XSS臭名昭著歷史悠久又極其危險睬塌,現(xiàn)代web開發(fā)框架如vue.js
、react.js
等歇万,在設計的時候就考慮了XSS攻擊對html插值進行了更進一步的抽象揩晴、過濾和轉義,我們只要熟練正確地使用他們贪磺,就可以在大部分情況下避免XSS攻擊硫兰。同時,許多基于MVVM
框架的SPA
(單頁應用)不需要刷新URL來控制view寒锚,這樣大大防止了XSS隱患劫映。另外呻粹,我們還可以用一些防火墻來阻止XSS的運行。
作者: 沐雨一橙風 鏈接:http://www.imooc.com/article/13553來源:慕課網(wǎng)本文原創(chuàng)發(fā)布于慕課網(wǎng) 苏研,轉載請注明出處,謝謝合作腮郊!