xss防護

xss的防護javascript

反射型xss測試的時候,能夠使用掃描器,或者burp進行fuzzhtml

存儲型xss測試的時候,能夠直接把字典中的payload都塞進去,根據彈窗的編號,就知道是哪一個。但這個容易被發現,因此能夠先試探一下特殊符號是否被過濾。前端

DOM型xss測試,主要以閱讀js代碼爲主。在頁面上找打輸入點的相關dom節點,在開發者選項中搜索一下,根據搜索結果去看是否被相關的JS操做,若是有js的操做,就去看咱們的輸入操做後輸出在哪一個地方,就按照常規的xss思路進行構建。java

防護通常來講,作實體字符編碼,htmlspecialchars(), 函數功能就是把特殊符號,好比尖括號,引號轉換成實體編碼,這樣就不會再輸入的地方去幹擾頁面源代碼。正則表達式

通過實體字符編碼後,用戶輸入的特殊符號在源代碼中就變成編碼,可是在頁面輸出的時候,仍是會顯示成原來的樣子。瀏覽器

當輸出位置在元素內容裏面,而且被實體編碼後,基本上就沒有xss的可能了。dom

可是若是輸出在事件屬性中,仍是有可能存在繞過的可能性。xss

好比在a標籤中,<a href=javascript:alert(1)>,這種形式,沒有尖括號也沒有引號,就有可能被繞過。若是存在相似這種的狀況,須要在連接屬性中加上http://或https://的正則表達式來限制。函數

xss的繞過方式測試

繞過過濾

一、前端限制,直接用F12開發者選項修改js既可,或者用burpsuite繞過。

二、字符過濾,雙寫,大小寫繞過 經過註釋符繞過,也能夠經過換行符繞過

繞過編碼

一、明確瀏覽器解析的機制

二、明白機制後,選擇對應的編碼

(1)輸出在標籤間的狀況:測試<>是否被過濾或轉義,若無則直接<imgsrc=1onerror=alert(1)> (2)輸出在script標籤內:咱們須要在保證內部JS語法正確的前提下,去插入咱們的payload。若是咱們的輸出在字符串內部,測試字符串可否被閉合。若是咱們沒法閉合包裹字符串的引號,這個點就很難利用了。可能的解決方案:能夠控制兩處輸入且\可用、存在寬字節 (3)輸出在HTML屬性內:首先查看屬性是否有雙引號包裹、沒有則直接添加新的事件屬性;有雙引號包裹則測試雙引號是否可用,可用則閉合屬性以後添加新的事件屬性;TIP:HTML的屬性,若是被進行HTML實體編碼(形如'&#x27),那麼HTML會對其進行自動解碼,從而咱們能夠在屬性裏以HTML實體編碼的方式引入任意字符,從而方便咱們在事件屬性裏以JS的方式構造payload。 (4)輸出在JS中,空格被過濾:使用/**/代替空格。 (5)輸出在JS註釋中:設法插入換行符%0A,使其逃逸出來。 (6)輸出在JS字符串內:能夠利用JS的十六進制、八進制、unicode編碼。 (7)輸出在src/href/action等屬性內:能夠利用javascript:alert(1),以及data:text/html;base64;加上base64編碼後的HTML。

(8)當咱們的XSSpayload位於這些標籤中間時,並不會解析,除非咱們把它們閉合掉。

​<textarea></textarea>
<title></title>
<iframe></iframe>
<noscript></noscript>​

<noframes></noframes> <xmp></xmp> <plaintext></plaintext>

相關文章
相關標籤/搜索