XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁面裏插入惡意html代碼。當用戶瀏覽該頁之時,嵌入當中Web裏面的html代碼會被運行,從而達到惡意攻擊用戶的特殊目的。javascript
爲何會出現XSS呢,這個沒什麼好說的,確定是過濾不嚴,或者就是程序員以爲XSS並無什麼實際的用途,從而忽略了XSS攻擊的產生。比方在一個搜索框裏面,對於輸入數據沒有一點過濾的話。那麼咱們提交如下這條語句
<script>alert(’test’)</script>
結果是什麼,你們應該都知道,就是頁面彈出了一個對話框。php
我記得當我剛開始對黑客技術產生興趣的時候,那是的XSS還只在於娛樂的地步。
html
它經過給別人發送帶有惡意腳本代碼參數的URL,當URL地址被打開時,特有的惡意代碼參數被HTML解析、運行。它的特色是非持久化,必須用戶點擊帶有特定參數的連接才幹引發。
既然是需要用戶點擊才幹觸發的跨站。那麼這就要考驗你的忽悠水平了,就像前段時間論壇出現的XSS攻擊。就是經過轉帳,而後被攻擊者查看消息從而觸發的一種反射型XSS攻擊
再如:
http://searchb.dangdang.com/?key=f',true,1);alert(1);//
這個經常逛烏雲的應該都不陌生,這就是一個典型的反射型XSS。需要誘使用戶去點擊該連接。xss代碼並不存儲在服務端。因此攻擊並不能持續。java
常用測試方法:
對整個輸入(特別強調的是。整個HTTP請求都是輸入,數據庫取來的數據事實上也是輸入。程序員
HTTP請求包含GET、POST參數。COOKIE,URL,頭部的REFERER等等)中每個地方都可以例如如下操做,
1. 本身構造一個惟一的串,好比:myxsstestxxxx
2. 將某個輸入項(比方某個參數)替換爲上面的串
3. 查看HTTP對應中是否有這個串。並記錄下來
4. 依據HTML上下文決定,用哪一種類型串來嘗試,嘗試攻擊串,而後又一次提交請求
5. 假設能夠找到對應的攻擊串說明漏洞是存在的 這裏的關鍵在於第四步。因爲server端可能會作一些限制,比方encode或者長度限制。測試的時候需要想辦法看看可否繞過限制。數據庫
這樣的狀況用戶可能直接打開正常的頁面就會看到被注入了
原理事實上也很是easy
XSS代碼被提交給站點-->站點把XSS代碼存儲進數據庫—>當該頁面再次被請求時。server發送已經被植入XSS代碼的數據給client—>client運行XSS代碼
比較常見的樣例是在留言板上插入XSS代碼,前提固然是留言內容過濾不善
想內容中加入[/code]<script>alert(‘test’)</script>[/code]
這樣就會彈出對話框。固然僅僅要是可以加入內容的地方,你都可以試試XSS,比方說QQ空間的裝扮裏面。有一個本身定義模塊。你可以選擇圖片,而後加入例如如下代碼
javascript:alert('XSS')"
固然,其可以運行的前提是服務端代碼是這樣寫的
A=get[a]
<img src=$a>
利用方法還有很是多。比方現在興起的XSS平臺,新建一個項目,你就可以作很是多事情
編程
DOM是一個與平臺、編程語言無關的接口,它贊成程序或腳本動態地訪問和更新文檔內容、結構和樣式,處理後的結果可以成爲顯示頁面的一部分。DOM中有很是多對象。當中一些是用戶可以操縱的,如uRI 。location,refelTer等。client的腳本程序可以經過DOM動態地檢查和改動頁面內容。它不依賴於提交數據到server端。而從client得到DOM中的數據在本地運行,假設DOM中的數據沒有通過嚴格確認,就會產生DOM—based XSS漏洞。
DOM—based XSS攻擊源於DOM相關的屬性和方法。被插入用於XSS攻擊的腳本。一個典型的樣例例如如下:
HTTP請求http://www.Xss.com/hello.html?name=test使用下面的腳本打印出登陸用戶test的名字,即
<SCRIPT>
var pos=docmnent.URL.indexOf(」name=」)+5;
document.write (document.URL.substring(pos,document.URL.1ength))。
< /SCRIPT>
假設這個腳本用於請求http://www.Xss.com/hello.html?瀏覽器
name=<script>alert(‘test’)</script>時,就
致使XSS攻擊的發生。
當用戶點擊這個連接,server返回包括上面腳本的HTML靜態文本,用戶瀏覽器把HTML文本解析成DOM,DOM中的document對象URL屬性的值就是當前頁而的URL。安全
在腳本被解析時,這個URL屬性值的一部分被寫入HTML文本,而這部分HTML文本倒是JavaScript腳本,這使得<script>alert(‘test’)</script>成爲頁面終於顯示的HTML文本。從而致使DOM—base XSS攻擊發生。
xss
CSRF站外類型的漏洞事實上就是傳統意義上的外部提交數據問題,通常程序猿會考慮給一些留言評論等的表單加上水印以防止SPAM問題,但是爲了用戶的體驗 性。一些操做可能沒有作不論什麼限制,因此攻擊者可以先預測好請求的參數,在站外的Web頁面裏編寫javascript腳本僞造文件請求或和本身主動提交的表單 來實現GET、POST請求。用戶在會話狀態下點擊連接訪問站外的Web頁面,client就被強迫發起請求。 假設,各位看官想具體瞭解CSRF google it! 這裏不過說了一些簡單的XSS原理。算一個拋磚引玉吧。各位可以跟帖討論,怎樣發揮XSS的最大能力