- 黑客攻防從入門到精通(Web技術實戰篇)
- 明月工作室 王棟
- 8043字
- 2020-05-22 18:52:16
2.2 Web功能及使用技術
除了在客戶端和服務器之間發送消息時使用的核心通信協議外,Web應用程序還通過使用不同的技術來實現其不同的功能。Web的主要功能我們將通過Web服務器端、Web客戶端、會話與狀態三個方面詳細介紹。
2.2.1 Web服務器端功能
Web服務器一般指網站服務器,是指駐留于互聯網上某種類型計算機的程序,可以向瀏覽器等Web客戶端提供文檔,也可以放置網站文件,讓全世界瀏覽;可以放置數據文件,讓全世界下載。目前最主流的3個Web服務器是Apache、Nginx、IIS。
在Mosaic瀏覽器(通常被認為是第一個圖形化的Web瀏覽器)和超鏈接內容的初期,演變出了“Web服務器”的新概念,它通過HTTP協議來提供靜態頁面內容和圖片服務。在那個時候,大多數內容都是靜態的,并且HTTP 1.0只是一種傳送文件的方式。但在不久后Web服務器提供了CGI功能,這意味著我們可以為每個Web請求啟動一個進程來產生動態內容。現在,HTTP協議已經很成熟了,并且Web服務器變得更加復雜,擁有了像緩存、安全和Session管理這些附加功能。隨著技術的進一步成熟,我們從Kiva和Net Dynamics學會了公司專屬的基于Java的服務器端技術。這些技術最終全都融入我們今天依然在大多數應用開發里使用的JSP中。
通俗地講,Web服務器傳送(serves)頁面使瀏覽器可以瀏覽,然而應用程序服務器提供的是客戶端應用程序可以調用(call)的方法(methods)。確切一點,你可以說:Web服務器專門處理HTTP請求(request),但是應用程序服務器是通過很多協議來為應用程序提供(serves)商業邏輯(business logic)的。
Web服務器可以解析(handles)HTTP協議。當Web服務器接收到一個HTTP請求(request),會返回一個HTTP響應(response),如送回一個HTML頁面。為了處理一個請求(request), Web服務器可以響應(response)一個靜態頁面或圖片,進行頁面跳轉(redirect),或者把動態響應(dynamic response)的產生委托(delegate)給一些其他的程序,如CGI腳本、JSP(Java Server Pages)腳本、servlets、ASP(Active Server Pages)腳本、服務器端(server-side)Java Script,或者一些其他的服務器端(server-side)技術。無論它們(譯者注:腳本)的目的如何,這些服務器端(server-side)的程序通常產生一個HTML的響應(response)來讓瀏覽器可以瀏覽。
要知道,Web服務器的代理模型(delegation model)非常簡單。當一個請求(request)被送到Web服務器里來時,它只單純地把請求(request)傳遞給可以很好地處理請求(request)的程序(譯者注:服務器端腳本)。Web服務器僅僅提供一個可以執行服務器端(server-side)程序和返回(程序所產生的)響應(response)的環境,而不會超出職能范圍。服務器端(server-side)程序通常具有事務處理(transaction processing)、數據庫連接(database connectivity)和消息(messaging)等功能。
雖然Web服務器不支持事務處理或數據庫連接池,但它可以配置(employ)各種策略(strategies)來實現容錯性(fault tolerance)和可擴展性(scalability),如負載平衡(load balancing)和緩沖(caching)。集群特征(clustering features)經常被誤認為僅僅是應用程序服務器專有的特征。
Web服務器的工作原理并不復雜,一般可分成以下4個步驟。
(1)連接過程。
(2)請求過程。
(3)應答過程。
(4)關閉連接。
下面對這4個步驟作簡單的介紹。連接過程就是Web服務器和其瀏覽器之間所建立起來的一種連接。查看連接過程是否實現,用戶可以找到和打開socket這個虛擬文件,這個文件的建立意味著連接過程這一步驟已經成功建立。請求過程就是Web的瀏覽器運用socket這個文件向其服務器提出各種請求。應答過程就是運用HTTP協議把在請求過程中所提出來的請求傳輸到Web的服務器,進而實施任務處理,然后運用HTTP協議把任務處理的結果傳輸到Web的瀏覽器,同時在Web的瀏覽器上面展示上述所請求之界面。關閉連接就是當上一個步驟——應答過程完成以后,Web服務器和其瀏覽器之間斷開連接之過程。如圖2-4所示。Web服務器上述4個步驟環環相扣、緊密相連,邏輯性比較強,可以支持多個進程、多個線程以及多個進程與多個線程相混合的技術。

圖2-4 Web服務器功能
在Unⅸ和Linux平臺下使用最廣泛的免費HTTP服務器是Apache和Nginx服務器,而Windows平臺NT/2000/2003使用ⅡS的Web服務器。在選擇使用Web服務器時應考慮的本身特性因素有性能、安全性、日志和統計、虛擬主機、代理服務器、緩沖服務和集成應用程序等。下面介紹幾種常用的Web服務器。
(1)IIS。Microsoft的Web服務器產品為Internet Information Services(IIS), IIS是允許在公共Intranet或Internet上發布信息的Web服務器。IIS是目前最流行的Web服務器產品之一,很多著名的網站都是建立在IIS的平臺上。IIS提供了一個圖形界面的管理工具,稱為Internet服務管理器,可用于監視配置和控制Internet服務。
IIS是一種Web服務組件,其中包括Web服務器、FTP服務器、NNTP服務器和SMTP服務器,分別用于網頁瀏覽、文件傳輸、新聞服務和郵件發送等方面,它使得在網絡(包括互聯網和局域網)上發布信息成了一件很容易的事。它提供ISAPI(Intranet Server API)作為擴展Web服務器功能的編程接口;同時,它還提供一個Internet數據庫連接器,可以實現對數據庫的查詢和更新。
(2)Kangle。Kangle Web服務器(簡稱Kangle)是一款跨平臺、功能強大、安全穩定、易操作的高性能Web服務器和反向代理服務器軟件。除此之外,Kangle也是一款專為做虛擬主機研發的Web服務器,實現虛擬主機獨立進程、獨立身份運行;用戶之間安全隔離,一個用戶出現問題不影響其他用戶;安全支持php、asp、asp.net、java、ruby等多種動態開發語言。
(3)WebSphere。WebSphere Application Server是一種功能完善、開放的Web服務器,是IBM電子商務計劃的核心部分,它是基于Java的應用環境,用于建立、部署和管理Internet和Intranet Web。這一整套產品進行了擴展,以適應Web服務器的需要,范圍從簡單到高級直到企業級。
WebSphere針對以Web為中心的開發人員,他們都是在基本HTTP服務器和CGI編程技術上成長起來的。IBM將提供WebSphere產品系列,通過提供綜合資源、可重復使用的組件、功能強大并易于使用的工具以及支持HTTP和IIOP通信的可伸縮運行時環境,來幫助這些用戶從簡單的Web應用程序轉移到電子商務世界。
(4)WebLogic。BEA WebLogic Server是一種多功能、基于標準的Web服務器,為企業構建自己的應用提供了堅實的基礎。各種應用開發、部署所有關鍵性的任務,無論是集成各種系統和數據庫,還是提交服務、跨Internet協作,起始點都是BEA WebLogic Server。由于它具有全面的功能、對開放標準的遵從性、多層架構、支持基于組件的開發,基于Internet的企業都選擇它來開發、部署最佳的應用。
BEA WebLogic Server在使應用服務器成為企業應用架構的基礎方面繼續處于領先地位。BEA WebLogic Server為構建集成化的企業級應用提供了穩固的基礎,它們以Internet的容量和速度,在連網的企業之間共享信息、提交服務,實現協作自動化。
(5)Apache。Apache仍然是世界上用得最多的Web服務器,市場占有率達60%左右。它源于NCSAhttpd服務器,當NCSA WWW服務器項目停止后,那些使用NCSA WWW服務器的人們開始交換用于此服務器的補丁,這也是Apache名稱的由來(pache補丁)。世界上很多著名的網站都是Apache的產物,它的成功之處主要在于它的源代碼開放、有一支開放的開發隊伍、支持跨平臺的應用(可以運行在幾乎所有的Unix、Windows、Linux系統平臺上)以及它的可移植性等方面。
(6)Tomcat。Tomcat是一個開放源代碼、運行Servlet和JSP Web應用軟件的基于Java的Web應用軟件容器。Tomcat Server是根據Servlet和JSP規范進行執行的,因此我們可以說Tomcat Server也實行了Apache-Jakarta規范且比絕大多數商業應用軟件服務器要好。
Tomcat是Java Servlet 2.2和Java Server Pages 1.1技術的標準實現,是基于Apache許可證下開發的自由軟件。Tomcat是完全重寫的Servlet API 2.2和JSP 1.1兼容的Servlet/JSP容器。Tomcat使用了JServ的一些代碼,特別是Apache服務適配器。隨著Catalina Servlet引擎的出現,Tomcat第四版的性能得到提升,使得它成為一個值得考慮的Servlet/JSP容器,因此許多Web服務器都是采用Tomcat。
(7)Jboss。Jboss是一個基于J2EE的開放源代碼的應用服務器。Jboss代碼遵循LGPL許可,可以在任何商業應用中免費使用,而不用支付費用。Jboss是一個管理EJB的容器和服務器,支持EJB 1.1、EJB 2.0和EJB 3.0的規范,但Jboss核心服務不包括支持Servlet/JSP的Web容器,一般與Tomcat或Jetty綁定使用。
Web服務器未來的發展趨勢有以下3個方面。
(1)從HTML到XML。
標準通用標記語言的子集HTML被稱為“第一代Web語言”,如前面的介紹,HTML作為Web的開發語言,對Web應用的發展起到了關鍵性的作用。但是HTML有一個致命的缺點:只適合于人與計算機的交流,不適合計算機與計算機的交流。HTML通過大量的標記來定義文檔內容的表現方式,它僅僅描述了應如何在Web瀏覽器頁面上布置文字、圖形,并沒有對Internet的信息含義本身進行描述,而信息又是Web應用中最重要的內容。通過HTML表現出來的文字、圖形內容很容易被人理解,但不利于計算機程序去理解。另外,HTML的另一個問題是它的標記集合是固定的,用戶不能根據自己的需要增加標記;而且各種瀏覽器的規格不盡相同,要使我們用HTML做的網頁能夠被所有瀏覽器正常顯示,我們只能夠使用W3C(萬維網協會)規定的標記來創建網頁。
正如前面所說,Web服務器向Web瀏覽器提供的信息都是來自有一定結構的數據庫,在數據庫里,為了檢索和管理的方便,信息按照它本身的意義(如姓名、年齡、工作單位等)被存放在相應的字段里,一旦這些數據被調出來,經過CGI、ASP、JSP、PHP等轉換成HTML后,其原來的意義無法轉移到HTML標記中來,用戶也就無法按照信息本來的意義去閱讀。并且由于操作系統以及數據庫的不同,不同的系統及應用層面之間要想互相理解對方的數據格式是相當困難的。這就需要一種新技術或標準能夠將最初保存在數據庫服務器中的原始數據結構在不同的系統層面共享。這種新技術就是XML。
使用XML可以解決上述難題。W3C對XML作了如下描述:“XML描述了一類被稱為XML文檔的數據對象,并部分描述了處理它們的計算機程序的行為。XML是標準通用標記語言的一個應用實例。從結構上說,XML文檔遵從標準通用標記語言文檔標準。”同HTML一樣,XML也是一種基于文本的標記語言,都是從標準通用標記語言發展而來,二者的不同在于:XML可以讓我們根據要表現的文檔,自由地定義標記來表現具有實際意義的文檔內容。例如,我們可以定義〈文檔名稱〉〈/文檔名稱〉這樣具有實際意義的標記。而且XML不像HTML那樣具有固定的標記集合,它實際上是一種定義語言的語言,也就是說使用XML的用戶可以定義無窮的標記來描述文檔中的任何數據元素,將文檔的內容組織成豐富的完整的信息體系。總體來說,XML具有四大特點:便于存儲的數據格式、可擴展性、高度結構化以及方便的網絡傳輸,這些特點為我們創建開放、高效、可擴展、個性化的Web應用提供了一個嶄新的起點。
(2)從有線到無線。
電子商務正在從臺式機向著更為廣泛的無線設備發展,Cahners In-Stat市場分析家預測,世界范圍內的無線用戶的人數近年來將會大幅度的增加。Aberdeen集團的研究主任Darcy Fowkes認為,采用無線方式進行電子商務的優勢并不僅僅在于方便,它還可以節約公司的財力,而且移動辦公能使工作更加高效。
然而,由于多種無線網絡類型、標記語言、協議和無線設備并存的復雜情況,使得網絡內容和數據轉換成能夠被無線設備識別的格式并不容易。許多企業都在致力于開發能夠把應用程序以及互聯網內容擴展到無線設備上的產品。
例如,IBM新版本的WebSphere Transcoding Publisher 3.5增加和改進了許多新的特性,可以將企業內部網上的數據翻譯到多種無線設備上。該版本中新的特性包括對更多的無線設備、數據格式的支持,以及語言翻譯功能。它基于Java架構,能把用HTML和XML等標記語言編寫的應用程序和數據轉換成WML、HDML(Handheld Device Markup Language)和iMode等無線設備所能識別的格式,這樣,通過手持設備就可以訪問互聯網上的信息。
無線設備廠商Mobilize也推出了Mobilize Commerce產品,幫助企業進入無線網絡。該軟件可以通過無線連接的方式訪問企業的內部系統,遠程地實現訂單發送,并進行確認。Mobilize Commerce可以充分利用XML對信息進行格式轉換,以適合于無線設備,這些無線設備包括筆記本電腦、個人數字助理、無線電話、網絡電話和雙向尋呼等。
(3)從無聲到有聲。
世界上有10億個電話終端,有超過2億個的移動電話,而就人自身的交流習慣來看,人們也更愿意利用聽和說的方式進行交流。
文本語音轉換器(TTS, Text to Speech)的研究工作已經取得了很大的進步,實現了自動的語言分析理解,并允許TTS的使用者增加更多的韻律、音調在講話中,使TTS系統的發聲更接近人聲。在自動語音識別系統(ASR)領域里,自動語音識別系統在從整個詞的模仿匹配,向音素層次的識別系統方向發展。自動語音識別系統的詞匯表由一個基于聲音片斷的字母表構成,而且這種詞匯表是受不同語言限制的。基于這種方式,在一個寬廣的聲音行列里,講話能被識別系統發現和挑揀出來,并加以識別。并且在識別一個詞的時候,每一個音素將從系統的輸入中被挑揀出來,拼接組合后與已經有的音素和詞語模板進行比較,來產生需要的模板。音素的識別大大減輕了ASR對講話者的依賴性,并且使它非常容易去建立大型的和容易修改的語音識別字典,從而滿足不同應用市場的需求。
Web語音發展的另一方面是語音可擴展標記語言(Voice eXtensible Markup Language, Voice XML)的進展。VoiceXML的主要目標是要將Web上已有的大量應用、豐富的內容,讓交互式語音界面也能夠全部享受。Web服務器處理一個來自客戶端應用的請求,這一請求經過了VoiceXML解釋程序語境處理,作為響應,服務器產生出VoiceXML文件,在回復當中,要經過VoiceXML解釋程序的處理。VoiceXML 1.0規范基于XML,為語音和電話應用的開發者、服務提供商和設備制造商提供了一個智能化的API。VoiceXML的標準化將簡化Web上具有語音響應服務的個性化界面的創建,使人們能夠通過語音和電話訪問網站上的信息和服務,像今天通過CGI腳本一樣檢索中心數據庫,訪問企業內部網,制造新的語音訪問設備。VoiceXML的執行平臺上面加載了相應的軟件和硬件,如ASR、TTS,從而實現語音的識別以及文本和語音之間的轉化。
2.2.2 Web客戶端功能
Web客戶端,顯然就是指瀏覽器(Browser)端。任何應用系統都必須有一個供用戶操作的界面,即用戶界面。瀏覽器的工作,從整個B/S程序來看,是用戶與整個B/S程序打交道的一個界面(接口),即人機界面(接口)、用戶界面。它的任務如下。
(1)收集用戶輸入的數據(如用戶數據:http://211.64.32.2/dsks/index.php)。
(2)將用戶數據發送到服務器(向服務器請求該用戶對服務器的請求)。
(3)接收服務器返回的響應(用瀏覽器能認識和執行的代碼即客戶端代碼表示,如HTML代碼、JavaScript代碼等)。
(4)解釋、執行這些代碼,將結果顯示在瀏覽器窗口中。
可見,瀏覽器扮演的是(多數情況下是遠程的)服務器在用戶那里的一個代理(Agent)的角色。這個代理,具有收集消息、請求響應和解釋其領導(服務器)發回的指示的作用。
無論是組織用于收集用戶數據的界面,還是解釋來自服務器的指示形成結果界面,都是用Web客戶端代碼表示的。常用的Web客戶端代碼使用HTML語言或JavaScript語言編寫,分別稱為HTML代碼或JavaScript代碼。另外,還有CSS、XML等語言。
1.HTML超文本標記語言
超文本標記語言是標準通用標記語言下的一個應用,也是一種規范,一種標準。它通過標記符號來標記要顯示的網頁中的各個部分。網頁文件本身是一種文本文件,通過在文本文件中添加標記符,可以告訴瀏覽器如何顯示其中的內容(如文字如何處理、畫面如何安排、圖片如何顯示等)。瀏覽器按順序閱讀網頁文件,然后根據標記符解釋和顯示其標記的內容,對書寫出錯的標記將不指出其錯誤,且不停止其解釋執行過程,編制者只能通過顯示效果來分析出錯原因和出錯部位。但需要注意的是,對于不同的瀏覽器,對同一標記符可能會有不完全相同的解釋,因而可能會有不同的顯示效果。
圖2-5為HTML編輯工具——Dreamweaver。

圖2-5 HTML編輯工具——Dreamweaver
超文本標記語言文檔制作不是很復雜,但功能強大,支持不同數據格式的文件鑲入,這也是萬維網(WWW)盛行的原因之一。其主要特點如下。
(1)簡易性。超文本標記語言版本升級采用超集方式,從而更加靈活方便。
(2)可擴展性。超文本標記語言的廣泛應用帶來了加強功能、增加標識符等要求,超文本標記語言采取子類元素的方式,為系統擴展帶來保證。
(3)平臺無關性。雖然個人計算機大行其道,但使用MAC等其他機器的大有人在,超文本標記語言可以使用在廣泛的平臺上,這也是萬維網(WWW)盛行的另一個原因。
(4)通用性。HTML是網絡的通用語言,一種簡單、通用的全置標記語言。它允許網頁制作人建立文本與圖片相結合的復雜頁面,這些頁面可以被網上任何其他人瀏覽到,無論使用的是什么類型的電腦或瀏覽器。
下面為HTML代碼格式。
<HTML> <HEAD> <TITLE>這里寫網頁的標題</TITLE> </HEAD> <BODY> 這里是網頁的主體(顯示在瀏覽器窗口中的部分) </BODY> </HTML>
2.CSS層疊樣式表
層疊樣式表是一種用來表現HTML或XML等文件樣式的計算機語言。
CSS目前最新版本為CSS3,是能夠真正做到網頁表現與內容分離的一種樣式設計語言。相對于傳統HTML的表現而言,CSS能夠對網頁中的對象的位置排版進行像素級的精確控制,支持幾乎所有的字體字號樣式,擁有對網頁對象和模型樣式編輯的能力,并能夠進行初步交互設計,是目前基于文本展示最優秀的表現設計語言。CSS能夠根據不同使用者的理解能力,簡化或者優化寫法,針對各類人群,有較強的易讀性。
有3種方法可以在站點網頁上使用樣式表。
(1)外聯式Linking(也叫外部樣式):將網頁鏈接到外部樣式表。
當樣式需要被應用到很多頁面時,外部樣式表將是理想的選擇。使用外部樣式表,你就可以通過更改一個文件來改變整個站點的外觀。
<head> <link rel="stylesheet" type="text/css" href="mystyle.css"> </head>
(2)嵌入式Embedding(也叫內頁樣式):在網頁上創建嵌入的樣式表。
當單個文件需要特別樣式時,就可以使用內部樣式表。你可以在head部分通過<style>標簽定義內部樣式表。
<head> <style type="text/css"> body {background-color: red} p {margin-left: 20px}</style> </head>(3)內聯式Inline(也叫行內樣式):應用內嵌樣式到各個網頁元素。
當特殊的樣式需要應用到個別元素時,就可以使用內聯樣式。使用內聯樣式的方法是在相關的標簽中使用樣式屬性。樣式屬性可以包含任何CSS屬性。以下實例顯示出如何改變段落的顏色和左外邊距。
<p style="color: red; margin-left: 20px"> This is a paragraph </p>
3.JavaScript腳本語言
JavaScript是一種直譯式腳本語言,一種動態類型、弱類型、基于原型的語言,內置支持類型。它的解釋器被稱為JavaScript引擎,為瀏覽器的一部分,被廣泛用于客戶端的腳本語言,最早是在HTML網頁上使用,用來給HTML網頁增加動態功能。JavaScript的組成成分如圖2-6所示。

圖2-6 JavaScript的組成成分
JavaScript是一種屬于網絡的腳本語言,已經被廣泛用于Web應用開發,常用來為網頁添加各式各樣的動態功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實現自身的功能的,其特點如下。
(1)是一種解釋性腳本語言(代碼不進行預編譯)。
(2)主要用來向HTML頁面添加交互行為。
(3)可以直接嵌入HTML頁面,但寫成單獨的js文件有利于結構和行為的分離。
(4)跨平臺特性。在絕大多數瀏覽器的支持下,可以在多種平臺下運行(如Windows、Linux、Mac、Android、iOS等)。
JavaScript腳本語言同其他語言一樣,有它自身的基本數據類型、表達式和算術運算符及程序的基本程序框架。JavaScript提供了4種基本的數據類型和2種特殊數據類型用來處理數據和文字。而變量提供存放信息的地方,表達式則可以完成較復雜的信息處理。
JavaScript是一種腳本語言,其源代碼在發往客戶端運行之前不需經過編譯,而是將文本格式的字符代碼發送給瀏覽器,由瀏覽器解釋運行。直譯語言的弱點是安全性較差,而且在JavaScript中,如果一條運行不了,那么下面的語言也無法運行。其解決辦法就是使用try{}catch(){}。
console.log("a"); //這是正確的 console.log("b"); //這是正確的 console.logg("c"); //這是錯誤的,并且到這里會停下來 console.log("d"); //這是正確的 console.log("e"); //這是正確的 /*解決辦法*/ try{console.log("a"); }catch(e){}//這是正確的 try{console.log("b"); }catch(e){}//這是正確的 try{console.logg("c"); }catch(e){}//這是錯誤的,但是到這里不會停下來, 而是跳過 try{console.log("d"); }catch(e){}//這是正確的 try{console.log("e"); }catch(e){}//這是正確的
JavaScript被歸類為直譯語言,因為主流的引擎都是每次運行時加載代碼并解譯。V8引擎是將所有代碼解譯后再開始運行,其他引擎則是逐行解譯(SpiderMonkey會將解譯過的指令暫存,以提高性能,稱為實時編譯),但由于V8的核心部分多數用JavaScript撰寫(而SpiderMonkey是用C++編寫的),因此在不同的測試上,兩者性能互有優劣。與其相對應的是編譯語言,如C語言,以編譯語言編寫的程序在運行之前,必須經過編譯,將代碼編譯為機器碼,再加以運行。
2.2.3 會話與狀態
Web應用中的會話是指一個客戶端瀏覽器與Web服務器之間連續發生的一系列請求和響應過程。
Web應用的會話狀態是指Web服務器與瀏覽器在會話過程中產生的狀態信息,借助會話狀態,Web服務器能夠把屬于同一會話中的一系列的請求和響應過程關聯起來。
為實現各種有用的功能,應用程序需要追蹤每位用戶通過不同的請求與應用程序交互的狀態。那么如何實現有狀態的會話?
(1)會話ID可以通過一種稱之為Cookies的技術在請求消息中進行傳遞,也可以作為請求URL的附加參數進行傳遞。會話ID是Web服務器為每一個客戶端瀏覽器分配的一個唯一代號,它通常是在Web服務器接收到某個瀏覽器的第一次訪問時產生,并且隨同響應消息一道發送給瀏覽器。
(2)會話過程由Web服務器端的程序開啟,一旦開啟了一個會話,服務器端程序就要為這個會話創建一個獨立的存儲結構來保存該會話的狀態信息,同一個會話中的訪問請求都可以且只能訪問屬于該會話的存儲結構中的狀態信息。
- 信息安全導論(在線實驗+在線自測)
- 開發者的Web安全戒律:真實威脅與防御實踐
- 計算機病毒原理與防范(第2版)
- Learning Veeam? Backup & Replication for VMware vSphere
- 數據安全與隱私計算(第3版)
- Kerberos域網絡安全從入門到精通
- 博弈論與數據安全
- 云計算安全防護技術
- 復雜信息系統網絡安全體系建設指南
- 紅藍攻防:技術與策略(原書第3版)
- 黑客攻防入門
- INSTANT Microsoft Forefront UAG Mobile Configuration Starter
- 網絡安全設計
- CCNA Security 210-260 Certification Guide
- ATT&CK視角下的紅藍對抗實戰指南