簡單的HTTP協議自己並不存在安全性問題,所以協議自己幾乎不會成爲攻擊的對象。應用HTTP協議的服務器和客戶端,以及運行在服務器上的Web應用等資源纔是攻擊目標。php
web應用的攻擊模式有如下兩種前端
跨站腳本攻擊(XSS)是指經過存在安全漏洞的Web網站註冊用戶的瀏覽器內運行非法的HTML標籤或JavaScript進行的一種攻擊。動態建立的HTML部分有可能隱藏着安全漏洞。就這樣,攻擊者編寫腳本設下陷阱,用戶在本身的瀏覽器上運行時,一不當心就會受到被動攻擊。目的:利用網站漏洞從用戶那裏惡意盜取信息。web
XSS攻擊,一般指黑客經過「HTML注入」篡改了網頁,插入了惡意的腳本,從而在用戶瀏覽網頁時,控制用戶瀏覽器的一種攻擊。在一開始,這種攻擊的演示案例是跨域的,因此叫作「跨站腳本」。可是發展到今天,因爲JavaScript的強大功能以及網站前端應用的複雜化,是否跨域已經再也不重要。可是因爲歷史緣由,XSS這個名字卻一直保留下來。shell
從效果上來講也是反射型XSS,單獨劃分出來,是由於DOM Based XSS的造成緣由比較特別,發現它的安全專家專門提出了這種類型的XSS。出於歷史緣由,也就把它單獨做爲一個分類了。數據庫
存儲型 XSS 跟 反射型 XSS 的區別是:存儲型 XSS 的惡意代碼存在服務器上,反射型 XSS 的惡意代碼存在 URL 裏。它是最危險的一種跨站腳本。比反射性 XSS 和 DOM 型 XSS 都更有隱蔽性,由於它不須要用戶手動觸發。任何容許用戶存儲數據的 Web 程序均可能存在存儲型 XSS 漏洞。若某個頁面遭受存儲型 XSS 攻擊,全部訪問該頁面的用戶都會被 XSS 攻擊。segmentfault
其原理是檢查 URL 和 DOM 中元素的相關性,但這並不能徹底防止反射型 XSS,並且也並非全部瀏覽器都支持 X-XSS-Protection。
X-XSS-Protection: 0
禁止XSS過濾。
X-XSS-Protection: 1
啓用XSS過濾(一般瀏覽器是默認的)。 若是檢測到跨站腳本攻擊,瀏覽器將清除頁面(刪除不安全的部分)。
X-XSS-Protection: 1; mode=block
啓用XSS過濾。 若是檢測到攻擊,瀏覽器將不會清除頁面,而是阻止頁面加載。
X-XSS-Protection: 1; report=<reporting-uri>
啓用XSS過濾。 若是檢測到跨站腳本攻擊,瀏覽器將清除頁面並使用CSP report-uri指令的功能發送違規報告。
複製代碼
function escapeHTML(str) {
if (!str) return '';
str = str.replace(/&/g, "&");
str = str.replace(/</g, "<");
str = str.replace(/>/g, ">");
str = str.replace(/"/g, """); str = str.replace(/'/g, "'");
return str;
};
複製代碼
過濾
在富文本中由於須要保留 HTML ,因此咱們不能使用轉義的方法防護 XSS 攻擊,這裏使用過濾的方式防護 XSS 攻擊,也就是經過只使用白名單容許的 HTML 標記及其屬性,來防護攻擊。後端
內容安全策略(csp)
實質是白名單策略,開發者明確告訴客戶端,哪些外部資源能夠加載和執行,大大加強了網頁的安全性。跨域
叫作「攻擊者僞造請求」,更好理解。瀏覽器
SameSite 屬性
Cookie 的 SameSite 屬性用來限制第三方 Cookie,從而減小安全風險,能夠用來防止 CSRF 攻擊和用戶追蹤。安全
同源檢測
在 HTTP 協議中,每個異步請求都會攜帶兩個 Header ,用於標記來源域名:
這兩個 Header 在瀏覽器發起請求時,大多數狀況會自動帶上,而且不能由前端自定義內容。 服務器能夠經過解析這兩個 Header 中的域名,肯定請求的來源域。
經過校驗請求的該字段,咱們能知道請求是不是從本站發出的。咱們能夠經過拒絕非本站發出的請求,來避免了 CSRF 攻擊。
點擊劫持是一種視覺上的欺騙手段。攻擊者使用一個透明的、不可見的iframe
,覆蓋在一個網頁上,而後誘使用戶在該網頁上進行操做,此時用戶將在不知情的狀況下點擊透明的iframe
頁面。經過調整iframe
頁面的位置,能夠誘使用戶剛好點擊在iframe
頁面的一些功能性按鈕上。
原理很簡單:
z-index
屬性讓其位於最上層。opacity
屬性讓其透明度爲0。點擊劫持攻擊與CSRF攻擊(詳見「跨站點請求僞造」一章)有殊途同歸之妙,都是在用戶不知情的狀況下誘使用戶完成一些動做。可是在CSRF攻擊的過程當中,若是出現用戶交互的頁面,則攻擊可能會沒法順利完成。與之相反的是,點擊劫持沒有這個顧慮,它利用的就是與用戶產生交互的頁面。
案例:
HTTP首部注入攻擊(HTTP Header Injection)是指攻擊者經過在響應首部字段內插入換行,添加任意響應首部或主體的一種攻擊。屬於被動攻擊模式。
向首部主體內添加內容的攻擊稱爲HTTP響應截斷攻擊(HTTP Response Splitting Attack)。
以下所示,Web應用有時會把從外部接收到的數值,賦給響應首部字段Location
和Set-Cookie
。
Loaction: http://www.example.com/a.cgi?q=12345
Set-Cookie: UID=12345
複製代碼
注入攻擊的本質,是把用戶輸入的數據當作代碼執行。這裏有兩個關鍵條件,第一個是用戶可以控制輸入;第二個是本來程序要執行的代碼,拼接了用戶輸入的數據。
所謂SQL注入,就是經過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執行惡意的SQL命令。具體來講,它是利用現有應用程序,將(惡意)的SQL命令注入到後臺數據庫引擎執行的能力,它能夠經過在Web表單中輸入(惡意)SQL語句獲得一個存在安全漏洞的網站上的數據庫,而不是按照設計者意圖去執行SQL語句。
SQL注入攻擊指的是經過構建特殊的輸入做爲參數傳入Web應用程序,而這些輸入大都是SQL語法裏的一些組合,經過執行SQL語句進而執行攻擊者所要的操做,其主要緣由是程序沒有細緻地過濾用戶輸入的數據,導致非法數據侵入系統。
好比先前的不少影視網站泄露VIP會員密碼大多就是經過WEB表單遞交查詢字符暴出的,這類表單特別容易受到SQL注入式攻擊.
(最佳方式)
使用預編譯的SQL語句,SQL語句的語義不會發生改變。在SQL語句中,變量用?
表示,攻擊者沒法改變SQL的結構,在上面的例子中,即便攻擊者插入相似於tom' or'1'='1
的字符串,也只會將此字符串當作username
來查詢。
使用存儲過程的效果和使用預編語句譯相似,其區別就是存儲過程須要先將SQL語句定義在數據庫中。但須要注意的是,存儲過程當中也可能會存在注入問題,所以應該儘可能避免在存儲過程內使用動態的SQL語句。若是沒法避免,則應該使用嚴格的輸入過濾
或者是編碼函數
來處理用戶的輸入數據。
檢查輸入數據的數據類型,在很大程度上能夠對抗SQL注入。好比用戶在輸入郵箱時,必須嚴格按照郵箱的格式;輸入時間、日期時,必須嚴格按照時間、日期的格式,等等,都能避免用戶數據形成破壞。但數據類型檢查並不是萬能,若是需求就是須要用戶提交字符串,好比一段短文,則須要依賴其餘的方法防範SQL注入。
OS命令注入攻擊(OS Command Injection)是指經過Web應用,執行非法的操做系統命令達到攻擊的目的。只要在能調用Shell函數的地方就有存在被攻擊的風險。
OS命令注入攻擊能夠向Shell發送命令,讓Windows或Linux操做系統的命令行啓動程序。也就是說,經過OS注入攻擊可執行OS上安裝着的各類程序。
目錄遍歷(Directory Traversal)攻擊是指對本無心公開的文件目錄,經過非法截斷其目錄路徑後,達成訪問目的的一種攻擊。這種攻擊有時也稱爲路徑遍歷(PathTraversal)攻擊。
經過Web應用對文件處理操做時,在由外部指定文件名的處理存在疏漏的狀況下,用戶可以使用.../等相對路徑定位到/etc/passed等絕對路徑上,所以服務器上任意的文件或文件目錄皆有可能被訪問到。這樣一來,就有可能非法瀏覽、篡改或刪除Web服務器上的文件。
當然存在輸出值轉義的問題,但更應該關閉指定對任意文件名的訪問權限。
遠程文件包含漏洞(Remote File Inclusion)是指當部分腳本內容須要從其餘文件讀入時,攻擊者利用指定外部服務器的URL充當依賴文件,讓腳本讀取以後,就可運行任意腳本的一種攻擊。
這主要是PHP存在的安全漏洞,對PHP的include或require
來講,這是一種可經過設定,指定外部服務器的URL做爲文件名的功能。可是,該功能太危險,PHP5.2.0以後默認設定此功能無效。
當然存在輸出值轉義的問題,但更應控制對任意文件名的指定。
源代碼:
http://example.com/foo.php?mod=news.php
通過攻擊後:
http://example.com/foo.php?mod=http://hackr.jp/cmd.php&cmd=1s
複製代碼
攻擊者經過把要引入的文件替換成本身的文件,就能攻擊到服務器了。
不正確的錯誤消息處理(Error Handling Vulnerability)的安全漏洞是指,Web應用的錯誤信息內包含對攻擊者有用的信息。與Web應用有關的主要錯誤信息以下所示。
Web應用沒必要在用戶的瀏覽畫面上展示詳細的錯誤消息。對攻擊者來講,詳細的錯誤消息有可能給他們下一次攻擊以提示。
開放重定向(Open Redirect)是一種對指定的任意URL做重定向跳轉的功能。而與此功能相關聯的安全漏洞是指,假如指定的重定向URL到某個具備惡意的Web網站,那麼用戶就會被誘導至那個Web網站。
原URL:
http://example.com/?redirect=http://www.tricorder.jp
被攻擊後:
http://example.com/?redirect=http://hackr.jp
複製代碼
用戶看到URL後原覺得訪問example.com,不料實際上被誘導至hackr.jp這個指定的重定向目標。
可信度高的Web網站若是開放重定向功能,則頗有可能被攻擊者選中並用來做爲釣魚攻擊的跳板。
密碼破解攻擊(Password Cracking)即算出密碼,突破認證。攻擊不只限於Web應用,還包括其餘的系統(如FTP或SSH等)。有如下幾種破解方法:
字典攻擊中有一種利用其餘Web網站已泄露的ID及密碼列表進行的攻擊。不少用戶習慣隨意地在多個Web網站使用同一套ID及密碼,所以攻擊會有至關高的成功概率
DoS攻擊(Denial of Service attack)是一種讓運行中的服務呈中止狀態的攻擊。有時也叫作服務中止攻擊或拒絕服務攻擊。DoS攻擊的對象不只限於Web網站,還包括網絡設備及服務器等。
有兩種DOS攻擊方式:
多臺計算機發起的DoS攻擊稱爲DDoS攻擊(DistributedDenial of Service attack)。DDoS攻擊一般利用那些感染病毒的計算機做爲攻擊者的攻擊跳板。
後門程序(Backdoor)是指開發設置的隱藏入口,可不按正常步驟使用受限功能。利用後門程序就可以使用本來受限制的功能。
一般的後門程序分爲如下3種類型。
可經過監視進程和通訊的狀態發現被植入的後門程序。但設定在Web應用中的後門程序,因爲和正常使用時區別不大,一般很難發現。
個人計算機網絡學習之旅暫時就結束了。由於大四還在實習,白天還須要完成公司的任務,只能在晚上或者週末去公司自主學習,前先後後大約有花一兩個月的時間。收穫不少,這種感受與當初上計算機網絡課的感受徹底不同,當時上了也就上了,知識都是零零散散的,都沒有去串聯起來,致使記得不深入。現在花了心思去整理總結後,有種融會貫通的感受,在Chrome調試,項目中先後端對接,性能優化方面的認知更爲鞏固和深入。