前言

一、为什么要写这本书

随着网络的普及,人们的工作、生活已经与网络深度融合。Web系统由于其高度可定制的特点,非常适合承载现有的互联网应用。目前,大量在线应用网站的出现和使用也印证了这一点。我们每个人每天都会打开各种网站搜索自己感兴趣的内容或使用某一个应用,其中每个站点的功能各不相同,业务流程也各自独立,并且站点功能及版本的迭代、更新速度非常快。同时,由于大量Web应用功能及版本的快速更新,也导致各类新型Web安全问题不断出现。尽管Web安全问题的表现形式各异,但深入分析各类安全问题的成因会发现,这些安全问题有一定的共性并能通过相关的网络安全技术来加以防御和解决。

反观Web安全的学习过程,由于Web安全攻防涉及的技术、工具繁多,安全问题也表现出各种复杂的形式,学习者很容易被这些表象混淆,进入“只见树木不见森林”的误区,无法快速成长。因此,本书作者基于多年的安全研究、教学、工程实践经验,以帮助读者建立知识体系为目标,通过原理、方法、代码、实践的层层深入,使读者充分理解Web安全问题的成因、危害、关联,进而有效地保护Web系统,抵御攻击。

二、本书的主要内容

本书试图整理出Web安全防护知识的体系,因此对每一类Web安全问题,都对从原理到攻防技术的演进过程加以详细的讲解。在针对安全问题的分析方面,本书从基础的漏洞环境入手,可排除不同业务环境的干扰,更聚焦于安全问题本身。这种方式有利于帮助读者在掌握每种Web安全问题的解决方案的同时,对整个Web安全防护体系建立清晰的认知。

本书主要内容共分为5部分,各部分内容如下。

第一部分(包括第1章):Web应用概念庞大、涉及的协议广泛,因此,此部分没有系统地介绍所有的基础内容,而是抽取了与Web安全关系密切的协议等方面的基础知识。这些知识对后续理解Web攻防技术极为关键。

第二部分(包括第2~8章):重点讲解Web应用中的基础漏洞,从用户端到服务器端依次开展分析。首先从主要攻击用户的跨站请求攻击入手,之后了解Web应用中的请求伪造攻击、针对Web应用于数据库交互产生的SQL注入攻击。再针对可直接上传各类危险文件的上传漏洞进行分析,并说明上传漏洞中常用的木马的基本原理。最后对服务器端的危险应用功能(文件包含、命令执行漏洞)进行分析。此部分重点讲解上述基本漏洞的原理及攻防技术对抗方法,并针对每个漏洞的测试及防护方法的技术演进思路进行整理。

第三部分(包括第9~15章):重点讲解Web应用的业务逻辑层面的基础安全问题。Web应用基于用户管理机制来提供个性化的服务,用户的身份认证则成为安全开展Web应用的基础功能。此部分从用户的未登录状态入手,讲解用户注册行为中潜在的安全隐患。然后对用户登录过程中的安全问题进行整理,并对常见的用户身份识别技术进行原理说明。最后对用户登录后的基本功能及用户权限处理方式进行讲解。

第四部分(包括第16~19章):主要讲解在实际Web站点上线之后的基础防护方式,并从Web整体应用的视角展示攻防对抗过程中的技术细节。重点针对Web服务潜在的基础信息泄漏方及对应处理方法进行总结。最后提供可解决大部分问题的简单防护方案,这对安全运维有较大的用途。

第五部分(包括第20~23章):在前几部分的基础上总结Web安全防护体系建设的基本方法。本部分先从Web安全中常见的防护类设备入手,分析各类安全防护设备的特点及适用范围。之后,对目前业界权威的安全开发体系进行基本介绍,并对安全服务中的渗透测试的主要流程进行说明。最后以实例的形式展示如何进行快速的代码审计。

以上每个部分的知识均为递进关系。第一部分和第二部分帮助读者了解Web应用中各类漏洞的原理及测试方式、防护手段等。第三部分和第四部分让读者了解业务层面和整体安全的防护方法。第五部分则从整体层间构建有效防护体系的思路。最后可综合掌握Web安全防护的整体内容,这也是本书希望读者获得的阅读效果。

三、本书的读者对象

本书适合所有对Web安全感兴趣的初学者以及从事安全行业的相关人员,主要包括以下几类读者:

信息安全及相关专业本科生

本书以基本的漏洞为例,循序渐进地梳理攻防对抗方式及各类漏洞的危害。信息安全及相关专业学生可根据这些内容快速入门,并以此作为基础来探索信息安全更前沿的领域。

安全运维人员

本书提供了大量漏洞利用特征及有效的安全运维方式,可供安全运维人员在实际工作中快速发现系统安全状况,并对安全漏洞进行基本的处理。

安全开发人员

本书列举了各种漏洞的原理分析及防护方式,可帮助开发人员在Web系统的开发过程中对漏洞进行规避,进而从根源上避免Web漏洞的出现。

安全服务人员

安全服务人员重点关注如何快速发现目标Web系统的安全隐患并针对问题提出处理建议。此类读者建议重点阅读本书前三部分以及最后一部分的最后两章,可为安全服务的工作开展提供更全面的技术支持。

攻防技术爱好者

对于攻防技术爱好者来说,本书提供了体系化的Web安全基础原理,可有效丰富个人的知识储备体系。

四、如何阅读这本书

本书虽然篇幅不大,但涉及的内容繁多,加之Web安全是一个实践性极强的领域,因此,我们对学习本书给出如下建议。

1.需要具备的基础知识

Web系统一般需要服务器、中间件、Web语言、数据库等多方面的支持,相应地,在Web安全防护中也会应用到上述知识。安全从业者不一定要像开发人员那样对以上内容非常熟悉,但应对以上内容有初步了解并理解基本用法。这方面的教程很多,读者可以自行选择。另外,本书的所有案例均基于PHP环境编写,因此读者如有基本的PHP知识,则能更好地理解本书的内容。

2.具有一定编程经验

在了解攻防技术方向之前,最好具有一定的编程经验。这些经验可帮助读者快速阅读漏洞源码及相应的语句,并可显著提升Web安全的学习效率。这里的编程经验以可独立阅读各种语言的基础示例代码为基准,并不需要有十分专业的开发能力。

3.善用搜索引擎

在学习Web安全的过程中会遇到非常多的基础内容或者特点,且每个人的基础并不相同。针对个人不理解的问题,建议善用各类搜索引擎来获取帮助。关于如何高效使用搜索引擎,可参考本书第四部分的讲解。

4.动手实践

Web安全是一个实践性很强的领域,需要通过大量的直接攻防技术练习来建立对漏洞的直观认识,并积累解决问题的经验。本书给出了大量的案例,读者可以利用这些案例进行练习,或者登录“i春秋在线培训平台”(www.ichunqiu.com)进行专项练习。

在本书的学习阅读顺序上,建议读者顺序学习本书的各章,以便对Web安全防护建立系统认识。不同基础的读者也可根据自身情况以及关注内容进行选择性的阅读。

五、致谢

本书的编写工作历时两年,在整个过程中得到了永信至诚科技股份有限公司与哈尔滨工业大学(威海)网络与信息安全研究中心的同事的支持和帮助,在本书即将付梓之际,谨向他们表示最诚挚的感谢!

感谢哈尔滨工业大学(威海)计算机科学与技术学院的迟乐军教授、谷松林老师在本书编写的各个环节中提供的支持;感谢殷亚静为本书绘制插图;感谢倪远东、王续武、刘深荣、孟晨、彭衍豪、刘骁睿、余超、卢鑫、李思锐、张鹏、雷朋荃、刘家豪、李彦哲、张瑞淇、付尧、黄欣、靳祯等对本书中案例的持续调整和完善;感谢机械工业出版社华章分社的编辑对本书的出版付出的劳动。

限于作者水平,加之Web安全防护技术的进展迅速,本书难免存在不当和疏漏之处,恳请各位读者提出、指正!我们期待与读者的交流!

作者

2018年1月