《白帽子講Web安全 第2版》正式出版!

01 前言
在2021年中秋假期前一天,吳翰清找到我,問我有沒有興趣參與編寫《白帽子講Web安全》的第2版,我當時第一反應是想拒絕,因為我自認為不擅長寫東西,這么多年連博客都沒怎么寫,而且那時候我剛從阿里離職出來創業,周末都不休息,也擔心自己抽不出時間來寫。我給的答復是先考慮一下,等假期后再給確切的答復。
但很快我內心就想明白了,我肯定會接受這件事,一來感覺自己做了這么多年安全需要留下一點總結,再者我要挑戰一下自己沒做過的事,其實從那天開始我就已經在構思該如何寫這本書了。
歷時近2年,《白帽子講Web安全》第2版終于要跟讀者見面了。在撰寫這本書的過程中,我不禁回想起自己入門網絡安全的經歷,我深知一份好的指引能讓初學者少走很多彎路。我把自己這些年對Web安全的理解寫在這本書中,希望對網絡安全的初學者能有所幫助。
02 我的安全之路
跟很多同行一樣,我走上安全這條路也是因為對計算機的強烈興趣,父母為此還給家里添置了一臺電腦,但我永遠都會記得當年我安全入門時的艱難。
當時我們農村還沒有通網絡,僅有的信息來源是郵購的電腦雜志以及附送的CD。沒人指引我應該學什么、怎么學,有段時間我很想學編程,但沒有網絡,我不知道能從哪里能獲得一個Visual Basic的安裝包。研究網絡攻防更是不太可能了,我只能看著雜志上零散的文章一邊學習軟件逆向和破解,一邊拿CD上附送的共享軟件(有免費試用期的軟件)練練手。
我花了很多時間去學習,在學業繁重的高中,我甚至用課堂時間閱讀電腦雜志,然而進步非常有限。由于缺少必要的技術知識儲備,逆向軟件更像是碰運氣去尋找并修改關鍵的跳轉指令。那些年的經歷讓我深刻明白,一份系統性介紹安全知識的書籍或教程對初學者有多么重要。
直到我上大學后,才有了更多的機會去學習安全技術。大學幾年對我的影響很大:有小伙伴一起每天研究技術、導師帶領我們參加全國信息安全大賽(那時候國內還沒流行CTF)、每天打DotA(雖然很菜)并研究怎么通過技術手段獲勝。
但是大學期間更重要的是我真正系統性的學習了計算機和安全課程,不再停留在工具的使用,而是對問題的理解從“知其然”到了“知其所以然”。這對我后續的工作產生了深遠的影響,大學期間的成長也讓我獲得了去阿里巴巴工作的機會。
03 我對學習安全技術的思考
如今互聯網上的資源跟我當年安全入門的時候完全不一樣,初學者動動手指就可以找到任何想要的學習資料。安全技術是一個實戰屬性非常強的領域,大部分安全從業人員(包括我自己)都是沖著對漏洞挖掘、攻擊技術的熱情而走進網絡安全領域。現在網絡上能找到大量現成的黑客工具和速成教程,初學者很容易就會被這些內容吸引,并且能很快找到攻擊實踐的成就感。
特別是Web安全領域,初學者不需要很了解操作系統,也不需要研究網絡協議,甚至可以不會寫代碼,都可以嘗到挖掘Web安全漏洞的甜頭。這會讓很多安全初學者形成錯誤的認知,認為計算機基礎知識和基本原理不重要,安全技術就是會挖漏洞、會使用各種安全工具。
但是真正從事安全領域的工作時,需要的技術能力會比漏洞挖掘和攻擊技術要多得多,從我個人的經歷,以及這十多年招聘新人的經驗來看,對于基礎技術原理的理解深度,會決定一個人學習新技術的能力,從而決定未來成長的高度。同時,掌握不同領域的技術,在工作當中解決問題時會有更靈活的思路、更優雅的解決方案。
在給阿里巴巴投簡歷之前,我沒接觸過Web安全,從同學那里得知阿里巴巴的筆試和面試會側重Web安全,于是我臨時抱佛腳學了幾天Web安全,還逆向分析了一下每天使用的酷狗音樂客戶端,通過Hook API修改發送給服務端的數據包,挖掘了一個存儲型XSS漏洞,我心里想面試過程中我也有Web安全實戰經驗可以講。我估計當時面試官并不僅是認可了我在Web安全領域的能力而錄取我。
進入阿里實習后,我認為在Web安全領域自己還是半桶水。當時淘寶網小號泛濫,導師讓我為淘寶網做一個人機識別功能。我現學了前端和JavaScript,再學了后端數據分析,做完這些就回學校參加畢業答辯去了。有天導師遠程給我報喜,說這個功能上線后垃圾賬號數量懸崖式下跌,后來這個功能變成了在阿里全集團使用的一個重要內部產品。
大學畢業后我就很少研究二進制相關的安全了,工作前兩年做Web安全相關的SDL,負責阿里云安全產品的攻防能力建設之后我在Web安全領域也研究得少了,后來我做了很多不同細分領域的工作,但是我學習到的計算機基礎課程和安全基本原理讓我受用至今,我可以很快勝任不同領域的工作。雖然網絡安全是個實踐性很強的領域,但是我認為掌握基礎原理和方法才是學習網絡安全的核心。
這個想法貫穿在編寫本書的整個過程中,我的理念是把Web安全的基本原理講述清楚,讓讀者明白安全漏洞、攻擊和防御的本質,在往后學習和工作過程中面臨新的問題時就能得心應手。
04 關于第2版
目前市面上關于Web安全的書籍,要么側重在漏洞挖掘和安全工具的使用,要么內容已經跟不上時代發展。Web安全攻防在近十年有了飛速發展,瀏覽器和Web標準的快速更新迭代帶來了大量新的安全特性,同時也引入了新的安全威脅,在這過程中也有很多陳舊的技術已經退出了歷史舞臺。這本書與第一版的定位一樣,是一本站在白帽子角度全面介紹Web安全和攻防原理的書籍,我根據這十年的技術發展,加入了很多新的安全內容,并刪掉了部分過時的技術。同時我也根據自己的工作經驗增加了安全產品中用到的檢測和防御技術,希望對自建安全產品的讀者有所幫助。
在第一版已有的內容上更新總覺得有點別扭,所以很多技術章節我還是按照自己的思路重寫了。我與吳翰清的寫作風格還是有比較大的差異,讀者在閱讀本書不同章節時可能會感受到截然不同的畫風。
這一版中我弱化了非技術的內容,我個人的偏好是寫技術內容,寫其他內容就容易卡殼。我把安全運營的章節刪掉了,主要是考慮到這并非我擅長的領域,而且我近幾年都在做安全產品,已經遠離甲方安全運營很多年,這個領域又非常依賴實踐經驗。如果我從網上看看別人的經驗再來寫書,我自己寫得難受,也擔心寫出來的東西沒營養。我也建議讀者多從實踐和交流中學習企業安全運營的知識。
我的原計劃是將本書用到的示例代碼放到GitHub,并且把演示環境做成Docker鏡像,但是隨著寫作的進行,我發現絕大部分的示例代碼都不長,而且我也認為讀者要有一定的親自搭建環境和編碼的實踐才能加深對安全原理的理解,所以就沒有做這部分工作,還請讀者見諒。
寫這本書讓我真正體驗到了寫書不易,創業以來的這兩年是我人生到目前為止最忙的兩年,只能擠出時間來寫。這個過程中我時常在想:想做一件事還是要趁早!我應該在7、8年前就來寫這本書,那時候我有大把的業余時間,也是自己研究技術最多的時候,可能會投入更多精力把它寫得更好。
到了本書的審閱階段,看到書中好多處我都在想:我這樣寫能不能讓讀者理解、要不要加一個示例、要不要再延伸一下。實在是最近個人精力非常有限,書雖已完,但一定有很多地方未能寫得更為深入細致,還請讀者多多包涵。
在此我要感謝電子工業出版社的編輯許艷,她在長達三個多月的時間里耐心的給我細致、專業的修改建議,教會我更嚴謹的表達,讓第一次寫書的我受益匪淺。
這本書的封面上寫有“白帽子安全講義系列叢書”字眼,我們的目標是未來推出更多白帽子系列書籍,這可能需要更多人的努力,我也期待未來有更多的白帽子加入。
