1. 程式人生 > >初探前端WEB安全#2

初探前端WEB安全#2

繼上一篇文章介紹了瀏覽器的同源策略以及跨域請求的解決方案,本篇文章打算說說常見的XSS攻擊,如果沒有寫多的話,就再說說CSRF


XSS滲透

XSS,Cross-Site Scripting是一類出現在web應用程式上的安全弱點,攻擊者可以通過XSS插入一些程式碼,使得訪問頁面的其他使用者都可以看到,也就是在html中用注入的Javascript指令碼,然後觸發執行。它允許攻擊者繞過安全機制,通過嘗試各種不同的方法插入惡意程式碼,如在即時通訊訊息、電子郵件、網頁留言等加入進行構造的URL,在使用者點選後執行惡意程式碼,攻擊者可以得到敏感頁面的許可權,會話,cookies,或者其他的東西

XSS本質:

用<>標記注射HTML/JavaScript


如其中的alert語句就源自模版變數的輸出,如:<%=content%>


XSS的危害也是極大,一不小心也會對系統造成巨大的損失

1.竊取使用者的cookies資料,模擬使用者身份登入竊取使用者隱私資料

2.網路釣魚

3.劫持使用者(瀏覽器)會話

4.彈廣告頁面,刷流量

5.惡意操作

6.進行大量客戶端攻擊(如DOS,DDOS)

7.傳播跨站XSS蠕蟲

8.提升使用者許可權,進一步滲透網站

9.結合其他漏洞(如CSRF)實施進一步攻擊

......


XSS滲透的基本原理:


XSS滲透的場景可以分為3類

1.臨時型

這也是最簡單的一種方式來檢驗系統的XSS漏洞的方式:

最常用的XSS漏洞的測試程式碼:


當這個程式碼被注入到輸入框或是url引數的時候,會成功也可能會失敗,如果失敗了,也不意味著網站就是安全的,需要繼續滲透。

如以下輸入:


使用者提交輸入的資料之後,回顯到頁面之後,將會出現彈出框,這類情況一定要進行XSS過濾或者轉義


2.持久型

此類XSS是對使用者的資料先儲存到伺服器,後面才從伺服器查詢出來並展示到頁面上,如果輸入的是指令碼資料,那麼頁面對該使用者資料同樣會執行。

這類XSS威脅性其實更大,比如攻擊者在論壇發帖的過程中,將惡意指令碼連同正常資訊一期注入到帖子的內容中,隨著帖子被論壇伺服器儲存下來,惡意指令碼也永久地被存放在論壇伺服器的後端儲存器中。當其它使用者瀏覽這個被注入了惡意指令碼的帖子的時候,惡意指令碼則會在他們的瀏覽器中得到執行,從而受到了攻擊。


3.DOM型(Document Object Model XSS)

這類XSS攻擊者將攻擊指令碼注入到 DOM 結構裡。出現該類攻擊的大多原因是含JavaScrip靜態HTML頁面存在XSS漏洞,因為此類滲透是基於在js上的,而且他不需要與服務端進行互動,像上述的幾種滲透方式都需要服務端的反饋來構造xss,因為服務端對我們是不可見的

感覺挖掘DOM XSS十分麻煩,因為有時你需要追蹤源,對方可能自定義函式,所以你需要一步一步把對方的自定義函式搞清楚,筆者腦子笨,也膽子小,不敢去嘗試通過XSS去滲透線上的入口網站,只敢自己寫一個小例子給大家解釋下這樣的滲透的效果。

這裡筆者使用DOM元素內容的替換來偽裝這是一個提交伺服器的處理過程,正常的情況下應該是由伺服器來返回這樣的一個結果

客戶端:


這裡,我通過對請求URL的分析來獲取其GET請求中的引數,這裡我假設請求中有a這個引數的傳遞,並且a引數的值的內容會反饋到DOM元素中


那麼在瀏覽器中:

我輸入如下的連結:

http://dev.xs.com/xss/test3.html?a=<script>alert("xss")</script>

在早期的360瀏覽器上,點選test按鈕會有如下的效果,當然為了能夠體現這樣一個簡單示例的效果,筆者也是特意下了一個早期的360瀏覽器



不過,也是因為瀏覽器的不同,比如chrome會在你提交資料之前,對URL進行編碼,這不是說DOM XSS不行了,因為這也是筆者的一個簡單的例子,希望大家能夠看到效果,所以不必在意,下方是chrome提交的效果:


大家也要注意,DOM XSS 是基於javascript基礎上,而且不與服務端進行互動,他的code對你是可見的。


XSS防禦

1.惡意指令碼防範,對危險字元進行轉義,可以自定義XSS過濾器



2.增加瀏覽器安全級別



3.開源工具庫JS-XSS

http://jsxss.com/zh/index.html



4.避免使用客戶端資料,儘量服務端動態生成


其實,說白了,就是不要信任客戶端輸入的資料,我們一定要對使用者輸入的內容進行嚴格的過濾和審查,才能進一步避免XSS這種注入式攻擊!


嘿嘿,一不小心就寫多了呢,本來還想在#2中簡單說說CSRF呢,我也打算移動到下一篇了呢!


以上內容,大神們不免會有嫌棄,畢竟僅僅是淺談筆者目前專案中開發用到的一點點技術和筆者自己一點點的積累,有啥問題也請大神們指點指點,畢竟筆者也還是個孩子,孩子的郵箱還是那個郵箱:

[email protected]


最後坦白來說,想寫的東西有很多,想研究的東西有很多,想說的廢話也有很多,嘿嘿,不過畢竟細水長流嘛,筆者也會繼續默默的學習,默默的更新部落格,儘管路不好走,但還得走啊!