Web安全

Web安全是一個系統性工程,從架構到編碼,從前端到服務器。javascript

1、前端php

一、跨站腳本攻擊(XSS)
跨站腳本攻擊(Cross Site Scripting),爲不和層疊樣式表(Cascading Style Sheets, CSS)的縮寫混淆,故縮寫爲XSS。前端

跨域(或者叫跨站),應該怎麼理解?之因此叫跨域,是由於這種攻擊或漏洞在剛開始的時候,是試圖獲取別的站點的機密信息的,致使瀏覽器推出同源策略,僅容許來自相同域名和使用相同協議的對象與網頁之間有交互;而今時今日,是否跨域已經不重要,不過名稱就一直保留了下來。java

既然是腳本攻擊,主角固然就是JS腳本了。原理是攻擊者經過各類途徑向網站輸入含JS代碼的信息,而後網站在頁面上輸出了這些信息,其中的JS代碼被執行。程序員

類型上可分爲:
1)持久型 XSS (Persistent型)
持久化,攻擊代碼存儲到了服務器。好比在我的信息或發表博客、使用富文本編輯器等地方,加入腳本代碼,若是沒有過濾或過濾不嚴,那麼這些代碼將儲存到服務器中,當用戶訪問相關展現頁面的時候就被觸發執行。這種XSS比較常見和危險,容易形成蠕蟲,盜竊cookie等。正則表達式

2)反射型 XSS (Non-persistent型)
在URL參數中帶腳本,而後顯示在頁面上。算法

這裏寫圖片描述

3)Dom-based型
由於歷史的緣由,有安全專家單獨提出這種類型,因此被單獨劃歸一類,實際上是利用了DOM來進行攻擊,持久型、反射型都有可能。如下例子算反射型也沒問題。數據庫

<?php error_reporting(0); $name = $_GET["name"]; ?>
<input id="text" type="text" value="<?php echo $name;?>" />
<div id="print"></div>
<script type="text/javascript"> var text = document.getElementById("text"); var print = document.getElementById("print"); print.innerHTML = text.value; // 獲取 text的值,而且輸出在print內。這裏是致使xss的主要緣由。 </script>

做者:梧桐雨
連接:https://www.zhihu.com/question/26628342/answer/33504799
來源:知乎
著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。

這裏寫圖片描述

【防護方法】
儘可能避免直接顯示用戶提交的數據,應進行必定的過濾,好比對於數據中存在的 < 和 > 等符號須要進行編碼,這樣就能夠防止腳本攻擊。json

按照《白帽子講WEB安全》所講,XSS還包含僞造表單請求。防護辦法是使用驗證碼。固然驗證碼早就不是什麼絕對的安全策略。跨域

二、跨站點請求僞造(CSRF)
Cross-site request forgery,一般縮寫爲 CSRF 或者 XSRF。

在網站外(好比其餘站點或郵件)僞造一個網站請求,誘使網站用戶點擊或運行,從而達到攻擊的目的。

爲啥要誘使用戶點擊?由於用戶是該網站的合法用戶,只有經過他點擊或運行,纔有相關權限。

有時候也許並不須要用戶點擊,只需瀏覽便可。好比,設置一個<img>,其src就是一個該死的請求。

這個請求這麼厲害,能被攻擊?是的,好比說,這是一個刪除啥東東的請求。

【防護方法】
檢查Referer字段
HTTP頭中有一個Referer字段,這個字段用以標明請求來源於哪一個地址。

添加校驗token
token由服務器輸出,而後瀏覽器請求時一塊兒提交,並不保存在cookie。

三、點擊劫持(ClickJacking)

將透明的圖片或frame覆蓋在正常頁面上,誤導用戶進行點擊。又被稱爲界面假裝。

問題是,如何作到將圖片或frame覆蓋?答案是黑客在本身站點用iframe來顯示被攻擊站點,而後再將透明圖片或另外一個透明的iframe覆蓋其上。

【防護方法】
拒絕別的站點用iframe來顯示本身站點的內容。
在服務器端設置 X-FRAME-OPTIONS

網頁上設置用於防止加載iFrame的Javascript代碼,好比檢測本身若是不處於top,立刻跳出來。
此方法適用於不支持X-FRAME-OPTIONS的版本較老的瀏覽器。

四、HTML5安全
HTML5在安全方面進行了加強,但新特性,帶來新的安全問題。包括:
1)新標籤的XSS,例如<video>

2)Canvas 功能強大,相似flash,能夠用於在客戶端破解驗證碼。上面說到,XSS包括僞造表單請求,防護方法就是驗證碼;但攻擊者能夠將驗證碼發送到本身的服務器上進行破解,破解之道大約是圖片識別,彩虹表對照之類吧。如今能夠用Canvas在客戶端就進行破解。

3)CORS
Cross-Orgin Resource Sharing,跨域資源共享。HTML5以前,要合法跨域的話,能夠經過JSONP,iframe等。如今有了一個W3C標準:CORS。

它容許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制。

原理是瀏覽器在請求頭附上一個標誌,服務器根據策略決定是否贊成。服務器能夠對策略進行設置,相似白名單。

而JSONP的原理則是:

一、瀏覽器的同源策略把跨域請求都禁止了;
二、HTML的<script>標籤是例外,src能夠輕易引用其餘站點的JS文件,因此,其餘站點將數據放在這個JS文件裏,不就能跨域訪問啦?
三、客戶端引用到JS以後,就拿到了數據,而後怎麼處理隨便你,但畢竟不夠方便,這時就有了jsonp 這種非正式的協議:客戶端定義一個回調函數,而後在src路徑附上這個函數名,做爲參數傳遞;而服務器端在JS文件中,將數據寫成用這個回調函數來調用。這樣數據就能自動進行處理了。

2、服務器端
一、注入攻擊
不解釋。

二、文件上傳漏洞(File Upload Attack)
漏洞就是上傳了一些別有用心的文件到服務器並被執行。

1)檢查文件類型,採用白名單
2)修改上傳文件名,消除文件名含有特殊字符,被操做系統斷句、解釋成另外一後綴名的漏洞
例如 photo123.asp;xx.jpg ,IIS6會解釋爲photo123.asp

3)對上傳圖片進行尺寸壓縮,殺滅其中可能存在的惡意代碼
4)單獨設置文件服務器域名,和應用程序分開,利用瀏覽器的同源策略
5)上傳目錄不可執行

三、認證與會話管理

1)密碼
不解釋

2)session與 cookie
用戶登陸後經常有一個sessionID,拿到它每每就等同於登陸;而這個sessionid一般都儲存在cookie。保護cookie能夠這樣:

【secure屬性】
當設置爲true時,表示建立的 Cookie 會被以安全的形式向服務器傳輸,也就是隻能在 HTTPS 鏈接中被瀏覽器傳遞到服務器端進行會話驗證,若是是 HTTP 鏈接則不會傳遞該信息,因此不會被竊取到Cookie 的具體內容。

【HttpOnly屬性】
若是在Cookie中設置了」HttpOnly」屬性,那麼經過程序(JS腳本、Applet等)將沒法讀取到Cookie信息,這樣能有效的防止XSS攻擊。

若是sessionid直接存放於url,例如手機版,由於不少手機瀏覽器不支持cookie,則更容易泄露。

【控制session生存週期】
例如強制銷燬,或者檢測用戶IP,客戶端發生變化則強制退出等

3)單點登陸
單點登陸將風險集中,一方面有利控制,一方面若是被攻陷,則影響範圍廣。應對辦法能夠雙認證,登陸用單點登陸,一些敏感的操做,應用系統能夠本身再認證一次。好比網銀,付款時要輸入付款密碼。

四、訪問控制
就是權限了。
隱藏頁面(好比菜單不可見,按鈕不可見)難以對付爬蟲和猜想,並不安全,須要在服務器端進行權限檢查。

權限分爲垂直權限和水平權限。垂直權限爲角色類,水平權限則是同一角色,但不一樣帳戶。若是兩個帳號屬同一個角色,但修改URL中的ID值,張三便可訪問甚至修改李四的資料,即有安全性問題。

五、加密算法與隨機數
不解釋

六、WEB框架安全
一些WEB框架,在機制方面自然就有優越的安全性,或者有利於實施安全性措施。好比ORM框架,能夠防範SQL注入;MVC框架,數據流向歷經View,Controller,Model,爲安全設計提供了便利。

同時,在框架層面進行安全防範,具備統1、不容易遺漏、減輕程序員工做等優勢。

然而,WEB框架自己也可能會出現漏洞,而且因爲框架版本穩定,通常不頻繁升級的特色,一旦漏洞沒法及時修補,後果很嚴重。

七、應用層拒絕服務攻擊
DDOS,Distributed Denial of Service,分佈式拒絕服務,利用合理的請求形成資源過載,致使服務不可用。

1)網絡層DDOS

常見的有SYN flood(flood,洪水之意)、UDP flood、ICMP flood。

其中SYN flood最爲常見,利用TCP的缺陷。具體說,就是將包中的源IP地址設置爲不存在或不合法的值。服務器一旦接受到該包便會返回接受請求包,但實際上這個包永遠返回不到來源處的計算機。這種作法使服務器必需開啓本身的監聽端口不斷等待,也就浪費了系統各方面的資源。

一個應對辦法是記錄IP並統計訪問頻率,離奇高者則屏蔽。或者引入硬件反DDOS設備。

2)應用層DDOS
硬件防DDOS設備通常無能爲力。攻擊原理是不斷請求消耗資源大的網頁。好比CC攻擊。
【CC】Challenge Collapasar,挑戰黑洞的簡稱。黑洞是中國安全公司綠盟的一款DDOS產品。好比讀數據庫,寫硬盤之類的操做。

應對辦法是
性能優化,使用緩存
限制請求頻率
使用驗證碼或者其餘人機識別方法

3)資源耗盡攻擊
【Slowloris】以極低的速度向服務器發出請求,目的是佔住鏈接不放,直至全部鏈接都被佔用。

【HTTP POST DOS】
發送http post包時,聲明Content-length很是大,卻以極低的速度發包,好比10到100秒發送一個字節,以此佔住鏈接不放,直至全部鏈接都被佔用。

【ReDOS】
讓服務器解釋一個別有用心的正則表達式,讓它根本停不下來。

八、其餘

相關文章
相關標籤/搜索