【零基礎學Web安全】Web安全基礎篇(一)


通過本篇文章,您可以了解一個web安全從業人員所具備的大致知識面,同時我也制定了一個循序漸進的學習計划,用以幫您找准自己的定位,並可以自己制定適合自己的學習計划,具體的會在下一篇文章里面進行講解,如果覺得有幫助的話,可以關注一下我,感謝。

1. Web請求流程概覽

 

 

 


2. Web中間件

中間件 (Middleware) 是一種連接軟件組件和應用的計算機軟件,它包括一切服務,一邊運行在一台或多台機器上的軟件通過網絡進行交互,該技術所提供的互操作性推動了一致分布式體系架構的演進,該架構通常用於支持簡化那些復雜的分布式程序,它包括Web服務器、事物監控器和消息隊列軟件。中間件是基礎軟件的一大類,屬於可復用軟件的范疇,顧名思義,中間件處於操作系統軟件和用戶的應用軟件的中間。

Web中間件上運行着由Web腳本語言編寫的系統。

 

 

 


3. Web編程語言

Web編程語言,根據解釋執行的位置可以分為前端語言和后端語言。Web前段語言是指在瀏覽器上解釋執行的Web編程語言,包括HTML和JavaScript等。Web后端語言是指在Web服務器上解釋執行的Web編程語言,包括JSP、PHP、ASP、ASP.Net等。

 

 

 


3.1. PHP簡介

PHP是“PHP Hypertext Preprocessor”的縮寫,它是一門用來使得服務器產生動態輸出的語言,輸出的結果根據每次瀏覽器請求頁面響應的結果而不同。通常,PHP文件的擴展名為.php。當Web服務器在請求的文件中遇到這個擴展名時,他將自動地將該文件傳遞給PHP處理器。當然,Web服務器是可以驚醒高配置的,一些Web開發者選擇把文件強制命名為.htm或者.html,但還交給PHP處理器進行解析,通常這樣做的目的是為了隱藏開發者正在使用PHP語言這一事實。

為了觸發PHP命令,需要一個新的標記,這個標記由 <?php和?> 組成,前者開始一段PHP代碼,代碼內容放置在兩個標記中間,最后由后者結束標記,整個PHP代碼結束。這個標記的使用方法很靈活,一些開發者把標記的開始部分放在文檔的開始點,在整個文檔結束處放置結束標記,直接由PHP命令輸出HTML結果;但是,還有一些人只是在需要動態叫本事將最少的PHP片段放入標記之間,剩下的文檔保留在標准的HTML中。

3.2. JavaScript簡介

JavaScript是完全在網頁瀏覽器上運行的客戶端腳本,它的用途是為了實現以腳本的方式來訪問HTML文檔中的所有元素。換句話說,JavaScript提供了一種和用戶動態交互的途徑,結合CSS,JavaScript能夠改變眼前動態網頁的樣式,而不是讓服務器返回一個新的頁面。要把JavaScript代碼放在以<script>開頭和</script>結尾的HTML標記之間才能調用它;除了在HTML文檔中直接編寫JavaScript代碼之外,還可以包含自己網站或因特網上的任何JavaScript代碼文件,其語法為:
<script type=“text/javascript” src=“script.js”></script>
或從因特網上獲取文件:
<script type=“text/javascript” src=“http://someserver.com/script.js”></script>

4. MySQL數據庫的特點

MySQL是一個可以通過強大和快速的類英語命令管理數據並支持大型數據庫的開源數據庫管理系統,它采用標准的SQL數據庫語言形式,可以運行在到各系統上並支持多種語言。一個MySQL數據庫包含一個或多個表,每個表又包含多條記錄(行),在這些行中有多種包括數據本身的屬性(列)。

5. 常見的數據庫和編程語言組合

 

 

 

6. B/S機制和C/S機制介紹

B/S結構(Browser/Server)即瀏覽器和服務器結構,他是隨着因特網技術的興起,對C/S結構的一種變化或者改進的結構。在這種結構下,用戶界面時通過www瀏覽器來實現的,極少部分是無邏輯在前端(瀏覽器)實現,但是主要食物邏輯在服務端實現,形成所謂的三層結構。

C/S結構(Client/Server)中,服務器通常采用高性能的PC、工作站或小型機,並采用大型數據庫系統,如Oracle、Sybase、Informix或SQL Server。客戶端需要用戶安裝專門的客戶端軟件。

7. HTTP介紹

HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於萬維網服務器傳輸文本到本地瀏覽器的傳送協議。HTTP是一個基於TCP/IP通信協議來傳遞數據的,它屬於應用層的面向對象協議,適用於分布式超媒體信息系統。HTTP於1990年被踢出,經過幾年的發展和使用得到不斷的完善和擴展。B/S架構的系統使用協議為HTTP協議,瀏覽器作為HTTP客戶端通過URL向HTTP服務器即Web服務器發送所有請求;Web服務器根據接收到的請求,向客戶端發送響應消息。HTTP常用的端口號包括80、8080、3128、8081、9080等。

 

 

 

HTTP具備簡單快捷、靈活、無連接、無狀態等特點,並支持B/S和C/S模式。其中,HTTP的無狀態特點是指,與FTP或者telnet不同,HTTP協議無法記憶客戶端的當前狀態,這種特性被稱為HTTP的無狀態性,因此,狀態的記憶需要憑借響應(HTML)中的hidden參數。

URL全稱Uniform Resource Location,即統一資源定位符,是互聯網上用來表示某一處資源的地址,其基本結構格式如下所示:

 

 

 [注]需要區分URL和URI。

URL中描述了協議,該URL用於檢索資源和資源名稱。如果資源是Web類型資源,則URL在開頭包含http / https。同樣,如果資源是文件,則以ftp開頭,如果資源是電子郵件地址,則以mailto開頭。
URI(統一資源標識符)是標識邏輯或物理資源的字符序列,與URL類似,也是一串字符。通過使用位置,名稱或兩者來標識Internet上的資源;它允許統一識別資源。

 

 

 

URL主要用於鏈接網頁,網頁組件或網頁上的程序,借助訪問方法(http,ftp,mailto等協議)來檢索位置資源;URI用於定義項目的標識,此處單詞標識符表示無論使用的方法是什么(URL或URN),都要將一個資源與其他資源區分開來。另外,URL指定要使用的協議類型,而URI不涉及協議規范。

8. HTTP請求

用戶和Web服務器之間的基本通信會話通過用戶瀏覽器發送HTTP和接收HTTP響應實現的,下圖反映了完整的HTTP請求過程

 

 

 


8.1. HTTP請求消息

在瀏覽器發送給Web服務器的請求消息中,請求消息的第一行(示例如下所示)被稱作請求行,相當於瀏覽器下打給服務器的指令。請求行由請求方法 (GET)、URL (/31/31-001.PHP)和版本協議 (HTTP/1.1)組成,他們之間以空格相隔:
GET /31/31-001.PHP HTTP/1.1
請求方法除了GET(獲取)以外,還有POST和HEAD等。GET和POST於HTML中form元素的method屬性指定的值相同。
HTTP請求的第二行及以后的內容被稱作請求頭信息(Header),其格式為名稱與值以冒號相隔。請求頭信息,但其中只有HOST是必須的。HOST是表示接受信息的主機名(FQDN)和端口號(80時可以省略)。請求頭部之后是請求數據,二者通過一個空行隔開。

8.2. HTTP請求方法

 

 

 

GET方法使用的是URL后緊跟查詢字符串的形式來傳遞參數的,但由於瀏覽器和服務器能夠處理的URL長度有限,所以當傳遞的信息量很大時,使用POST方法哼安全;另外,敏感信息應該使用POST發送,這是因為POST有下列風險:

URL中指定的參數經由Refer泄露;
URL中指定的參數殘留在訪問日志中。
因此,傳遞請求中包含數據更新等請求時、發送敏感信息時以及發送信息量很多時,都應使用POST方法而不使用GET方法。

8.3. HTTP響應消息

一般情況下,服務器接受並處理客戶端發過來的請求后會返回一個HTTP的響應消息,HTTP響應也應由四個部分組成,即狀態行,消息報頭/響應頭信息、空行和響應正文。狀態行的內容是請求消息經過服務器處理以后的狀態,其包括(示例如下所示)協議版本(HTTP/1.1)、狀態碼(200)和狀態描述(OK)組成。
HTTP/1.1 200 OK
響應消息的第二行及以后的內容為響應消息,內容一直到出現空行(只含有換行符的行)為止,以下為典型的響應頭信息:

Content-Length:現實響應正文的字節數
Content-Type:指定為MIME類型。MIME即為Multiple Internet Mail Extensions消息內容類型的因特網標准。HTML文檔的情況下MIME類型為text/html。
常見的MIME類型如下表所

 

 

 

 

 


8.4. HTTP狀態碼

常見的HTTP狀態碼和其含義如下表所示:

 

 

 

[注]
重定向是指通過各種方法將網絡請求重新設定方向轉到其他位置,如網頁重定向、域名重定向、陸游的選擇變化等。現實中重定向的原因可能是網站調整(如改變網頁目錄結構)、網頁被移到新地址、網頁擴展名改變。如果不做重定向,那么用戶瀏覽器頁面則可能出現404錯誤。

9. Web應用主要安全威脅

9.1. OWASP Top 10

開放式Web應用程序安全項目 (OWASP, Open Web Application Security Project) 是一個組織,它提供有關計算機和互聯網應用程序的公正、實際、有成本效益的信息。其目的是協助個人、企業和機構來發現和使用可信賴軟件。OWASP每隔四年就會發布一版十大最嚴重的Web應用安全威脅,即OWASP Top 10,它被視為web應用安全領域的權威參考。美國聯邦貿易委員會(FTC)強烈建議所有企業需遵循OWASP十大WEB弱點防護守則。

 

 

 

(13版本的A4和A7合並為17版本A5;13版本A8和A10因為威脅的范圍較小因而在17版本中被去除)

 

 


9.2. 注入類威脅

9.2.1. 簡介

注入類威脅的產生原因是Web應用程序沒有將程序代碼和用戶提交的數據嚴格區分開來,將惡意用戶提交的數據當做了一部分代碼解析執行,注入類威脅輕則泄露各種敏感信息,嚴重的將直接導致整個網站服務器被控制。

9.2.1. SQL注入

原理:惡意用戶提交的數據被Web用用程序當成數據庫查詢代碼解析執行
威脅:用戶敏感信息,如賬號密碼,家庭住址,聯系方式等信息泄露


9.2.2. XSS漏洞

原理:惡意用戶提交的數據被Web應用程序當作HTML標簽和JavaScript代碼返回給瀏覽器解析執行。XSS又叫CSS (Cross Site Script),跨站腳本攻擊。
威脅:竊取cookie,網站釣魚,網站掛馬


9.2.3. 文件上傳漏洞

原理:惡意用戶上傳的文件被Web應用程序當作腳本代碼解析執行
威脅:植入Webshell,控制整個網站

9.2.4. 文件包含漏洞

原理:Web應用程序執行的過程中,往往需要調用多個文件,惡意用戶提交的數據被Web應用程序當作正常的需要調用的文件,從而造成文件包含漏洞
威脅:植入Webshell,控制整個網站,竊取網站敏感信息

9.2.5. 任意文件下載漏洞

原理:Web應用程序往往會提供文件下載的功能,如果被下載的文件是黑客可以任意修改的,那么就會造成任意文件下載漏洞
威脅:竊取網站敏感信息,進一步發現網站更多漏洞

9.2.6. OS命令注入漏洞

原理:Web應用程序會提供一些執行系統命令的接口,如果網站對用戶提交的參數過濾不嚴格,那么就會把惡意用戶提交的參數當成系統命令執行,從而造成命令執行漏洞。
威脅:執行系統命令,網站被控制

9.3. 信息泄露類威脅

9.3.1. 簡介

信息泄露類漏洞主要是由於Web應用組件(Web服務器,Web中間件,Web應用程序)配置錯誤或者設計缺陷造成的,通過此類問題,惡意攻擊者能夠獲取目標服務器的各種敏感信息,進而為下一步攻擊埋下伏筆。

9.3.2. 目錄信息泄露

原理:Web應用中間件配置錯誤時,如果用戶訪問不存在的索引文件 (index.html, index.php等)的目錄,就會直接顯示該目錄下所有文件及其子目錄。
威脅:泄露網站路徑,文件名等敏感信息

9.3.3. 敏感文件泄露

原理:發布網站時,管理員往往會忘記刪除網站開發時留下的包含網站敏感信息的各種文件,如網站源碼壓縮文件,.git,.bak,.svn等文件
威脅:泄露網站源代碼等敏感信息

9.3.4. 弱口令泄露

原理:弱口令簡單說就是容易被黑客猜解出來的口令,網站后台的登錄口令如果過於簡單,就會被黑客猜解出來,從而造成弱口令漏洞
威脅:網站敏感信息泄露,某些情況寫可以導致Web服務器被控制

9.3.5. 未授權訪問泄露

原理:Web應用系統對管理后台,敏感API等沒有進行有效的權限控制,從而造成未授權用戶能夠任意訪問
威脅:造成網站敏感信息泄露

9.3.6. 敏感路徑泄露

原理:Web應用系統的管理后台、編輯器后台等敏感路徑設置的過於簡單,就會被黑客猜解出來從而造成敏感路徑泄露漏洞
威脅:網站敏感信息泄露

9.4. 業務邏輯類威脅

9.4.1. 簡介

業務邏輯漏洞本質上屬於業務設計缺陷,表現為設計者或開發者在思考過程中作出的業務流程存在明顯或隱含的錯誤,惡意攻擊者利用這些業務設計缺陷,通過篡改業務流程和數據,往往能達到設計人員‘意料之外’的效果

9.4.2. 訂單金額任意修改

原理:網站商品的訂單處理的業務邏輯,信任了前端傳入的金額參數,沒有在服務端進行驗證,導致惡意用戶可以任意修改訂單的金額
威脅:網站商品的訂單處理的業務邏輯,信任了前端傳入的金額參數,沒有在服務端進行驗證,導致惡意用戶可以任意修改訂單的金額

9.4.3. 驗證碼判斷缺陷

原理:用戶在找回密碼、認證注冊時,網站發送的驗證碼可以被惡意攻擊者直接獲取或者重復提交
威脅:跳過驗證碼、任意修改密碼

9.4.4. 接口無限制枚舉

原理:網站敏感接口,如登錄接口、驗證碼接口、優惠劵校驗或其他防止枚舉的機制容易遭受枚舉攻擊。
威脅:暴力破解密碼,暴力枚舉驗證碼

9.4.5. cookie設計缺陷

原理:Web應用在設計用戶登錄cookie時,沒有嚴格遵循隨機化機制,而是采用可預測的隨機數或者直接使用賬號、昵稱等信息作為cookie,從而造成惡意用戶可以偽造任意用戶cookie
威脅:登錄任意賬號、泄露用戶敏感信息

9.4.6. 密碼找回設計缺陷

原理:Web 應用系統在設計密碼找回功能時存在設計缺陷,比如沒有采用安全的隨機數作為密碼找回憑證,導致該憑證可以被任意惡意用戶預測,從而造成任意密碼重復
威脅:任意修改密碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM