XSS(cross site script)是指惡意攻擊者利用網站沒有對用戶提交數據進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去。使別的用戶訪問都會執行相應的嵌入代碼,從而盜取用戶資料、利用用戶身份進行某種動做或者對訪問者進行病毒侵害的一種攻擊方式。javascript
XSS是一種常常出如今web應用中的計算機安全漏洞,也是web中最主流的攻擊方式。html
主要緣由:過於信任客戶端提交的數據,客戶端提交的數據原本就是應用所須要的,可是惡意攻擊者利用網站對客戶端提交數據的信任,在數據中插入一些符號以及javascript代碼,那麼這些數據將會成爲應用代碼中的一部分了。那麼攻擊者就能夠肆無忌憚地展開攻擊啦。vue
解決辦法:不信任任何客戶端提交的數據,只要是客戶端提交的數據就應該先進行相應的過濾處理而後方可進行下一步的操做。java
又稱爲非持久性跨站點腳本攻擊,它是最多見的類型的XSS。漏洞產生的緣由是攻擊者注入的數據反映在響應中。一個典型的非持久性XSS包含一個帶XSS攻擊向量的連接(即每次攻擊須要用戶的點擊)。git
又稱爲持久型跨站點腳本,它通常發生在XSS攻擊向量(通常指XSS攻擊代碼)存儲在網站數據庫,當一個頁面被用戶打開的時候執行。每當用戶打開瀏覽器,腳本執行。持久的XSS相比非持久性XSS攻擊危害性更大,由於每當用戶打開頁面,查看內容時腳本將自動執行。github
當用戶可以經過交互修改瀏覽器頁面中的DOM並顯示在瀏覽器上時,就有可能產生這種漏洞,從效果上來講它也是反射型XSS。經過修改頁面的DOM節點造成的XSS,稱之爲DOMBasedXSS。web
容易致使DOM型的XSS的輸入源包括:
Document.URL
Document.referrer
Document.cookie
Window.name
Location.[pathname|href|search|hash]
localStorage/globalStorage數據庫
針對用戶提交的數據進行有效的驗證,只接受咱們規定的長度或內容的提交,過濾掉其餘的輸入內容。好比:segmentfault
對用戶輸入的數據進行HTML Entity編碼 。瀏覽器
字符 | 十進制 | 轉義字符 |
---|---|---|
" | " | " |
& | & | & |
< | < | < |
> | > | > |
空格 |   | |
使用「」對特殊字符進行轉義,除數字字母以外,小於127使用16進制「xHH」的方式進行編碼,大於用unicode.
這條原則主要針對動態生成的JavaScript代碼,這包括腳本部分以及HTML標籤的事件處理屬性(如onerror, onload等)。在往JavaScript代碼裏插入數據的時候,只有一種狀況是安全的,那就是對不可信數據進行JavaScript編碼,而且只把這些數據放到使用引號包圍起來的值部分(data value)之中。
注意:在對不可信數據作編碼的時候,不能圖方便使用反斜槓 對特殊字符進行簡單轉義,好比將雙引號 " 轉義成 " ,這樣作是不可靠的,由於瀏覽器在對頁面作解析的時候,會先進行HTML解析,而後纔是JavaScript解析,因此雙引號極可能會被當作HTML字符進行HTML解析,這時雙引號就能夠突破代碼的值部分,使得攻擊者能夠繼續進行XSS攻擊;另外,輸出的變量的時候,變量值必須在引號內部,避免安全問題;更加嚴格的方式,對除了數字和字母之外的全部字符,使用十六進制xhh 的方式進行編碼。
<meta http-equiv="Content-Security-Policy" content="xxxxxxxxxx">
/** * 使用:引入: import base from '../../../../vv-base/vue/base.js' 調用: base.toUrl('http://www.baidu.com') */ const base={ /** * 內容轉義 * eg: 使用v-html時,進行轉義 */ toHtml(val) { var entityMap = { "&": "&", "<": "<", ">": ">", '"': '"', "'": ''', "/": '/' }; return String(val).replace(/[&<>"'\/]/g, function (s) { return entityMap[s]; }); }, /** * a標籤中的href屬性值轉義 * eg: <a :href="base.toUrl(url)"></a> */ toUrl(url) { if(url.match(/^http/i)){ return encodeURI(url) } return '#' } } export default base;
根據白名單過濾 HTML(防止 XSS 攻擊)
XSS Filter Evasion Cheat Sheet 中文版
https://segmentfault.com/a/11...