1噪馏、什么是XSS攻擊
- XSS(Cross SiteScript)攻擊是跨站腳本攻擊的縮寫,是一種網(wǎng)站應用程序的安全漏洞攻擊,是代碼注入的一種没酣。
- 通常通過利用網(wǎng)頁開發(fā)時留下的漏洞轻专,通過巧妙的方法注入惡意代碼到網(wǎng)頁忆矛,使用戶加載并執(zhí)行攻擊者惡意制造的網(wǎng)頁程序。
- 這些惡意網(wǎng)頁程序通常是javascript请垛,但實際上可以包括java催训,vbscript,activex宗收,flash甚至是普通的HTML漫拭。
- 攻擊成功后,攻擊者可能得到更高的權(quán)限(如執(zhí)行一些操作)混稽,私密網(wǎng)頁內(nèi)容采驻,回話和cookie等各種內(nèi)容。
2匈勋、原理
在web的世界里有各種各樣的語言礼旅,于是乎對于語句的解析大家各不相同,有一些語句在一種語言里是合法的洽洁,但是在另外一種語言里是非法的各淀。這種二義性使得黑客可以用代碼注入的方式進行攻擊——將惡意代碼注入合法代碼里隱藏起來,再誘發(fā)惡意代碼诡挂,從而進行各種各樣的非法活動碎浇。歷史悠久的SQL注入和XSS注入都是這種攻擊方式的典范临谱。
XSS的基本實現(xiàn)思路很簡單——比如持久型XSS通過一些正常的站內(nèi)交互途徑,例如發(fā)布評論奴璃,提交含有JavaScript的內(nèi)容文本悉默。這時服務器端如果沒有過濾或轉(zhuǎn)義掉這些腳本,作為內(nèi)容發(fā)布到了頁面上苟穆,其他用戶訪問這個頁面的時候就會運行這些腳本抄课,從而被攻擊。
3雳旅、防范
3.1使用XSS Filter
輸入過濾跟磨,對用戶提交的數(shù)據(jù)進行有效性驗證,僅接受指定長度范圍內(nèi)并符合我們期望格式的的內(nèi)容提交攒盈,阻止或者忽略除此外的其他任何數(shù)據(jù)抵拘。
輸出轉(zhuǎn)義,當需要將一個字符串輸出到Web網(wǎng)頁時型豁,同時又不確定這個字符串中是否包括XSS特殊字符僵蛛,為了確保輸出內(nèi)容的完整性和正確性,輸出HTML屬性時可以使用HTML轉(zhuǎn)義編碼(HTMLEncode)進行處理迎变,輸出到<script>中充尉,可以進行JS編碼。
3.2
由于XSS臭名昭著歷史悠久又極其危險衣形,現(xiàn)代web開發(fā)框架如vue.js驼侠、react.js等,在設(shè)計的時候就考慮了XSS攻擊對html插值進行了更進一步的抽象谆吴、過濾和轉(zhuǎn)義泪电,我們只要熟練正確地使用他們,就可以在大部分情況下避免XSS攻擊纪铺。
同時相速,許多基于MVVM框架的SPA(單頁應用)不需要刷新URL來控制view,這樣大大防止了XSS隱患鲜锚。另外突诬,我們還可以用一些防火墻來阻止XSS的運行。