您好,登錄后才能下訂單哦!
什么是xss
XSS又叫CSS (Cross Site Script) ,跨站腳本***。它指的是惡意***者往Web頁面里插入惡意html代碼,當用戶瀏覽該頁之時,嵌入其中Web里面的html代碼會被執行,從而達到惡意的特殊目的。XSS屬于被動式的***,因為其被動且不好利用,所以許多人常呼略其危害性。
XSS有哪些類型?
反射型:簡單的描述就是把用戶輸入的數據反射給瀏覽器,這個數據可能是Html代碼或者js代碼,反射后讓瀏覽器去執行。
存儲型:把用戶輸入的數據(比如惡意的js代碼)存儲在服務器端,具有很強的穩定性,危害時間長。
DOM Based XSS:這種不是按照存儲在哪里來劃分的,可以說是反射型,由于歷史原因,歸為一類,通過改變DOM結構形成的XSS稱之為DOM Based。
實際上,我認為xss主要可以分為:持久型xss和非持久型xss。
持久型xss就是將對客戶端***的腳本植入到服務器上,從而導致每個正常訪問頁面的用戶都會遭到這段xss腳本的***。
非持久型xss是對一個頁面的url中的某個參數做文章,把精心構造的惡意腳本包裝到url參數中,再將這個url散布到網上, 騙取用戶訪問這個url,從而對其進行***。
XSS的危害
1、劫持Cookie
2、構建Get和Post請求操作用戶的瀏覽器,使用JavaScript模擬瀏覽器發包
3、XSS釣魚
4、獲取用戶系統,瀏覽器信息
5、識別用戶安裝的軟件
6、劫持瀏覽器回話,從而執行任意操作。
7、強制彈出廣告頁面,刷流量
8、獲取用戶真實ip
等等。。。。。。。。。。。。
XSS的觸發條件
了解XSS的觸發條件就先得從HTML(超文本標記語言)開始,我們瀏覽的網頁全部都是基于超文本標記語言創建的。
而XSS的原理也就是往HTML中注入腳本,HTML指定了腳本標記<script>....</script>.在沒有過濾字符的情況下,只需要保持完整無錯的腳本標記即可觸發XSS,假如我們在某個資料表單提交內容,表單提交內容就是某個標記屬性所賦的值,我們可以構造如下值來閉和標記來構造完整無錯的腳本標記,
"><script>alert('XSS');</script><"
"><script> onclick="alert('XSS')</script><"
結果形成了<A HREF=""><script>alert('XSS');</script> <"">Hahaha</A>
(假如做了一些過濾,還可以這樣)
測試閉和表單賦值所在的標記,形成完整無錯的腳本標記可觸發XSS,但是沒有腳本標記怎么觸發XSS呢?呵呵,我們只好利用其他標記了,假如要在網頁里顯示一張圖片,那么就要使用一個<img>標記,示例如下:
<img src=" http://safe.it168.com /x ss.gif">
img標記并不是真正地把圖片給加入到Html文檔把兩者合二為一,而是通過src屬性賦值。那么瀏覽器的任務就是解釋這個img標記,訪問src屬性所賦的值中的URL地址并輸出圖片。問題來了!瀏覽器會不會檢測src屬性所賦的值呢?答案是否!那么我們就可以在這里大做文章了,接觸過javascript的同志應該知道,javascript有一個URL偽協議,可以使用“javascript:”這種協議說明符加上任意的javascript代碼,當瀏覽器裝載這樣的URL時,便會執行其中的代碼.于是我們就得出了一個經典的XSS示例:
<img src="javascript:alert('XSS');">
當然并不是所有標記的屬性都能用,細心的你應該發現標記的屬性在訪問文件才觸發的XSS,這里我就不再深入,因為離開標記的屬性還有事件能幫助我們觸發XSS.那什么是事件呢?只有達到某個條件才會引發事件,正巧img標記有一個可以利用的onerror()事件,當img標記內含有一個onerror()事件而正好圖片沒有正常輸出便會觸發這個事件,而事件中可以加入任意的腳本代碼,其中的代碼也會執行.現在我們又得到了另外一個經典的XSS示例:
<img src=" http://x ss.jpg" onerror=alert('XSS')>
<img src=" http://x ss.jpg" onerror=alert("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")> 過濾了alert來執行彈窗
綜合這一部分,我們知道XSS的觸發條件包括:完整無錯的腳本標記,訪問文件的標記屬性和觸發事件。
預防措施
1、輸入檢測
對用戶的所有輸入數據進行檢測,比如過濾其中的“<”、“>”、“/”等可能導致腳本注入的特殊字符,或者過濾 "script"、"javascript" 等腳本關鍵字,或者對輸入數據的長度進行限制等等。同時,我們也要考慮用戶可能繞開ASCII碼,使用十六進行編碼如“<</span>”(“<”)、“>”(“>”)等來輸入腳本。因此,對用戶輸入的十六進制編碼,我們也要進行相 應的過濾。只要開發人員能夠嚴格檢測每一處交互點,保證對所有用戶可能的輸入都進行檢測和XSS過濾,就能夠有效地阻止XSS***。
2. 輸出編碼
通過前面對XSS***的分析,我們可以看到,之所以會產生XSS***,就是因為Web應用程序將用戶的輸入直接嵌入到某個頁面當中,作為該頁面的HTML代 碼的一部分。因此,當Web應用程序將用戶的輸入數據輸出到目標頁面中時,只要用HtmlEncoder等工具先對這些數據進行編碼,然后再輸出到目標頁面中。這樣,如果用戶輸入一些HTML的腳本,也會被當成普通的文字,而不會成為目標頁面HTML代碼的一部分得到執行。
3. Cookie防盜
利用XSS***,***者可以很方便地竊取到合法用戶的Cookie信息。因此,對于網站來說,不能在Cookie信息中存放太多敏感信息,也不能將 Cookie作為身份認證的唯一標識,等等。因此,對于Cookie,我們可以采取以下的措施。首先,我們要盡可能地避免在Cookie中泄露隱私,如用 戶名、密碼等;其次,我們可以將Cookie信息用MD5等Hash算法進行多次散列后存放;再次,為了防止重放***,我們也可以將Cookie和IP進行綁定,這樣也可以阻止***者冒充正常用戶的身份。
4. 嚴格限制URL訪問
攻 擊者使用XSS***,通常都要借助于自己指定的網站頁面,比如用它來記錄敏感信息等等。因此,在頁面的腳本代碼執行過程中,只要我們 嚴格限制其訪問的URL,比如只允許腳本代碼訪問本網站的URL等方式,就可以避免腳本的執行鏈接到其它可能是***者指定的頁面上。
5 網站程序端
防范XSS***的一種方法是在服務器端采取防范措施。在大部分的跨站漏洞里,就是因為程序的過濾不嚴格,導致了***者可以在網站中加入“<”、“>”等字符,從而導致XSS***的產生.所以我們在程序的編寫中就要強制過濾關鍵字,過濾“<”、“>”,把用戶的輸入放入引號內,以達到數據與代碼隔離、過濾雙引號,防止用戶跨越許可的標記,添加自定義標記、過濾TAB和空格,防止關鍵字被拆分、過濾script關鍵字、過濾&#,防止HTML屬性繞過檢查.下面是一些實例
5.1 過濾“<”、“>”實例
***語句:<script>alert(/XSS/)</script>
防范方法:replace(str,“<”,“&#x3C;”)&#ascii
replace(str,“>”,“&#x3E;”)
注:script為服務器端語句,不進行ascii解釋,用戶輸入的語句中含有“<”,“>”,都用&#x代替.所以過濾“<”、“>”基本可以防范跨站.&#(unicode編碼的十進制數)是unicode的HTML表示方式
5.2 HTML屬性過濾
上面的代碼可以過濾掉“<”和“>”標記,讓***者無法構造HTML標記.但是,有經驗的***者就有可能會利用已存在的腳本屬性來進行針對性***,假如***者利用插入圖片功能,把圖片的路徑屬性修改為一段script代碼,也是可以達到跨站的目的的.
下面我們來用實例來演示如何防范運用插圖片方式進行***的手法:
***語句:<imgsrc=“javascript:alert(/XSS/)”width=100>
很多的HTML標記里屬性都支持“javascript:跨站代碼”的形式,因此就需要對***者輸入的數據進行如下轉換
防范方法:replace(str,“javascript:”,“”)
replace(str,“jscript:”,“”)
replace(str,“vbscript:”,“”)
從而達到的效果是:用戶輸入的語句中含有“javascript”,“jscript”,“vbscript”,都用空白代替.從而讓***者利用插入圖片功能修改路徑屬性進行跨站***的企圖失敗
5.3 過濾特殊字符
因為HTML屬性的值,是用可支持“&#ASCii”的形式進行表示的,所以***語句代碼可變型為:
***語句:<imgsrc=“javascript:alert(/XSS/)”width=100> 這樣就可以突破過濾程序進行跨站***.
其防范代碼為: replace(str,“&”,“&”) 這個代碼中把“&”替換為了“&”,后面的語句就變得沒有意義了.
5.4 其他的方式繞過
過濾例如下面這段代碼:
***語句:<imgsrc=“javascript:alert(/XSS/)”width=100>
注意中間的空格,此空格分隔了關鍵字,也就是說,對Tab鍵進行了拆分.這樣就需要考慮把Tab空格過濾.
5.5 HTML屬性跨站的徹底防范
就算是程序員考慮到了大多數的***方法,并做出了相應的過濾.***者也是有可能利用程序的缺陷進行***的.例如下面這兩條語句實例:
<imgsrc=“#”style=“XSS:expression(alert(/XSS/));”>
<imgsrc=“#”/**/onerror=alert(/XSS/)width=100>
***者仍然可以繞過過濾進行XSS***,所以也要考慮到這種情況的防范.
XSS為什么真正的***過程中個很少用呢?
1、耗時間
2、有一定幾率不成功
3、沒有相應的軟件來完成自動化***
4、前期需要基本的html、js功底,后期需要扎實的html、js、actionscript2/3.0等語言的功底
5、是一種被動的***手法
6、對website有http-only、crossdomian.xml沒有用
沒事可以都收據一些xss***腳本 沒準就用上了呢
這一篇文章很不錯適合新手看 https://zhuanlan.zhihu.com/p/26177815
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。