一篇文章讓你輕鬆了解Xss攻擊
什麼是XSS攻擊
跨站腳本(cross site script)為了避免與樣式css混淆,所以簡稱為XSS。
XSS是一種經常出現在web應用中的計算機安全漏洞,也是web中最主流的攻擊方式。那麼什麼是XSS呢?
XSS是指惡意攻擊者利用網站沒有對用戶提交數據進行轉義處理或者過濾不足的缺點,進而添加一些代碼,嵌入到web頁面中去。使別的用戶訪問都會執行相應的嵌入代碼。
從而盜取用戶資料、利用用戶身份進行某種動作或者對訪問者進行病毒侵害的一種攻擊方式。
XSS攻擊的危害包括:
1、盜取各類用戶帳號,如機器登錄帳號、用戶網銀帳號、各類管理員帳號
2、控制企業數據,包括讀取、篡改、添加、刪除企業敏感數據的能力
3、盜竊企業重要的具有商業價值的資料
4、非法轉賬
5、強制發送電子郵件
6、網站掛馬
7、控制受害者機器向其它網站發起攻擊
打開今日頭條,查看更多精彩圖片原因解析
為什麼會有跨站腳本攻擊?
主要原因:過於信任客戶端提交的數據!
解決辦法:不信任任何客戶端提交的數據,只要是客戶端提交的數據就應該先進行相應的過濾處理然後方可進行下一步的操作。
進一步分析細節:
客戶端提交的數據本來就是應用所需要的,但是惡意攻擊者利用網站對客戶端提交數據的信任,在數據中插入一些符號以及javascript代碼,那麼這些數據將會成為應用代碼中的一部分了。那麼攻擊者就可以肆無忌憚地展開攻擊啦。
因此我們絕不可以信任任何客戶端提交的數據!!!,所以,我們必須在後台作出過濾
Xss攻擊類型
反射型xss攻擊
又稱為非持久性跨站點腳本攻擊,它是最常見的類型的XSS。漏洞產生的原因是攻擊者注入的數據反映在響應中。一個典型的非持久性XSS包含一個帶XSS攻擊向量的鏈接(即每次攻擊需要用戶的點擊)。
簡單例子
正常發送消息:
http://www.test.com/message.php?send=Hello,World!
接收者將會接收信息並顯示Hello,Word
非正常發送消息:
http://www.test.com/message.php?send=<script>alert(『foolish!』)</script>!
接收者接收消息顯示的時候將會彈出警告窗口
存貯型xss攻擊
又稱為持久型跨站點腳本,它一般發生在XSS攻擊向量(一般指XSS攻擊代碼)存儲在網站資料庫,當一個頁面被用戶打開的時候執行。每當用戶打開瀏覽器,腳本執行。持久的XSS相比非持久性XSS攻擊危害性更大,因為每當用戶打開頁面,查看內容時腳本將自動執行。谷歌的orkut曾經就遭受到XSS。
簡單例子:
從名字就可了解到存儲型XSS攻擊就是將攻擊代碼存入資料庫中,然後客戶端打開時就執行這些攻擊代碼。例如留言板
留言板表單中的表單域:<input type=「text」 name=「content」 value=「這裡是用戶填寫的數據」>
正常操作:
用戶是提交相應留言信息;將數據存儲到資料庫;其他用戶訪問留言板,應用去數據並顯示。
非正常操作:
攻擊者在value填寫<script>alert(『foolish!』)</script>【或者html其他標籤(破壞樣式。。。)、一段攻擊型代碼】;
將數據存儲到資料庫中;
其他用戶取出數據顯示的時候,將會執行這些攻擊性代碼
回到頂部
DOMBasedXSS(基於dom的跨站點腳本攻擊)
基於DOM的XSS有時也稱為type0XSS。當用戶能夠通過交互修改瀏覽器頁面中的DOM(DocumentObjectModel)並顯示在瀏覽器上時,就有可能產生這種漏洞,從效果上來說它也是反射型XSS。
通過修改頁面的DOM節點形成的XSS,稱之為DOMBasedXSS。
前提是易受攻擊的網站有一個HTML頁面採用不安全的方式從document.location 或document.URL 或 document.referrer獲取數據(或者任何其他攻擊者可以修改的對象)。
簡單例子:
1 <HTML>
2 <TITLE>Welcome!</TITLE>
3 Hi
4 <SCRIPT>
5 var pos=document.URL.indexOf("name=")+5;
6 document.write(document.URL.substring(pos,document.URL.length));
7 </SCRIPT>
8 <BR>
9 Welcome to our system
10 …
11 </HTML>
這個例子是個歡迎頁面,name是截取URL中get過來的name參數
正常操作:
http://www.vulnerable.site/welcome.html?name=Joe
非正常操作:
http://www.vulnerable.site/welcome.html?name=<script>alert(document.cookie)</script>
將產生xss條件。讓我們看看為什麼:受害者的瀏覽器接收到這個鏈接,發送HTTP請求到www.vulnerable.site並且接受到上面的HTML頁。受害者的瀏覽器開始解析這個HTML為DOM,DOM包含一個對象叫document,document裡面有個URL屬性,這個屬性里填充著當前頁面的URL。當解析器到達javascript代碼,它會執行它並且修改你的HTML頁面。倘若代碼中引用了document.URL,那麼,這部分字元串將會在解析時嵌入到HTML中,然後立即解析,同時,javascript代碼會找到(alert(…))並且在同一個頁面執行它,這就產生了xss的條件。
注意:
1. 惡意程序腳本在任何時候不會嵌入到處於自然狀態下的HTML頁面(這和其他種類的xss不太一樣)。
2.這個攻擊只有在瀏覽器沒有修改URL字元時起作用。 當url不是直接在地址欄輸入,Mozilla.會自動轉換在document.URL中字元<和>(轉化為%3C 和 %3E),因此在就不會受到上面示例那樣的攻擊了,在IE6下沒有轉換<和>,因此他很容易受到攻擊。
當然,直接嵌入到HTML只是攻擊的一個掛載點,有很多腳本不需要依賴<和>漏洞,因此Mozilla通常也是無法阻止這些攻擊的。
XSS漏洞修復
從上面XSS實例以及之前文章的介紹我們知道XSS漏洞的起因就是沒有對用戶提交的數據進行嚴格的過濾處理。因此在思考解決XSS漏洞的時候,我們應該重點把握如何才能更好的將用戶提交的數據進行安全過濾。
HTML Encode
用戶將數據提交上來的時候進行HTML編碼,將相應的符號轉換為實體名稱再進行下一步的處理。
在PHP中已經存在這樣子功能的函數,即是htmlentities($str)函數。
與之相反的就是html_entity_decode($str)函數,它將實體名稱轉換為相應的符號。
※OSx AppleScript簡單入門
※HCNA網路工程師考試真題及解析
TAG:青峰科技 |