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年前就来写这本书,那时候我有大把的业余时间,也是自己研究技术最多的时候,可能会投入更多精力把它写得更好。
到了本书的审阅阶段,看到书中好多处我都在想:我这样写能不能让读者理解、要不要加一个示例、要不要再延伸一下。实在是最近个人精力非常有限,书虽已完,但一定有很多地方未能写得更为深入细致,还请读者多多包涵。
在此我要感谢电子工业出版社的编辑许艳,她在长达三个多月的时间里耐心的给我细致、专业的修改建议,教会我更严谨的表达,让第一次写书的我受益匪浅。
这本书的封面上写有“白帽子安全讲义系列丛书”字眼,我们的目标是未来推出更多白帽子系列书籍,这可能需要更多人的努力,我也期待未来有更多的白帽子加入。