1. 程式人生 > >xss原理、攻擊方式與防禦

xss原理、攻擊方式與防禦

客戶端 包含 pre window frame com 跨站 行處理 iframe

xss原理:

xss叫跨站腳本攻擊,是Web程序中常見的漏洞只用於客戶端的攻擊方式,其原理是攻擊者向有XSS漏洞的網站中輸入(傳入)惡意的HTML代碼,當其它用戶瀏覽該網站時,這段HTML代碼會自動執行,從而達到攻擊的目的。如,盜取用戶Cookie、破壞頁面結構、重定向到其它網站等。所以做網站的時候要明白一個道理:用戶的輸入是不可信的,所有可輸入的地方都要進行數據進行處理才能杜絕xss攻擊;

xss攻擊的二種方式:

1.反射型:一種基於網頁DOM結構的攻擊,該攻擊特點是中招的人是少數人。通常為通過改變網頁連接後面帶的參數來達到他們的攻擊目的;由於這種危害和範圍都小我就不具體介紹了,具體看下方鏈接;

2.存儲型:這種方式多用於評論或發布文章之類的,內容包含惡意代碼(主要為script、link、style、iframe、frame);當有人把這些代碼隨評論發布出來,你點擊查看的時候他就攻擊成功;也可以通過這些代碼隨意改變你的頁面;這種攻擊方式危害性更大,危害面更廣;

xss防禦的三種方式:

1.編碼:對用戶輸入的數據進行HTML entity編碼

技術分享

比如用戶輸入:<script>window.location.href=”http://www.baidu.com”;</script>,保存後最終存儲的會是:&lt;script&gt;window.location.href=&quot;http://www.baidu.com&quot;&lt;/script&gt;在展現時瀏覽器會對這些字符轉換成文本內容顯示,而不是一段可執行的代碼。

這裏推薦encode.js這個三方插件對輸入編碼;百度找不到就去github上找;

2.過濾:移除用戶上傳的DOM屬性和script、link、style、iframe、frame節點

比如用戶輸入:<style>body{display:none!important}</script>,保存後最終存儲的會讓你整個網頁為空白頁,其他同理;

if(tag==‘script‘||tag==‘style‘||tag==‘link‘||tag==‘iframe‘||tag==‘frame‘) return;  //這樣就對用戶輸入的幾個節點過濾了

3.校正:避免直接對HTML entity編碼,使用DOM Parse對象進行轉換,校正不匹配的DOM標簽;這裏推薦domParse.js這個三方插件;

參考博客:XSS攻擊及防禦

xss原理、攻擊方式與防禦