首页>参考读物>计算机科学与技术>安全

开发者的Web安全戒律:真实威胁与防御实践
作者 : [美]马尔科姆·麦克唐纳(Malcolm McDonald) 著
译者 : 贾玉彬 侯亮 译
出版日期 : 2022-07-28
ISBN : 978-7-111-71033-2
定价 : 79.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 191
开本 : 16
原书名 : Web Security for Developers:Real Threats,Practical Defense
原出版社: No Starch Press
属性分类: 店面
包含CD : 无CD
绝版 : 未绝版
图书简介

本书介绍了成为高效Web开发人员所需掌握的基本安全知识,并将教你为何你的网站容易受到攻击以及如何保护它们。每一章都分解了一个主要的安全漏洞,并探讨了一个真实的攻击,结合大量的代码,向你展示漏洞和修复方法。

图书特色

WU

图书前言

互联网是一个“疯狂”的地方。人们很容易有这样的印象—互联网是由网络专家精心设计的,并且一切都做得很好。实际上,互联网的发展是迅速而随意的,我们今天在互联网上所做的事情远远超出了互联网发明者的想象。
正因如此,保护互联网安全是一项艰巨的任务。网站是一种独特的软件形式,它发布后立即为数百万用户所使用,其中包括活跃而积极的黑客社区。大公司通常会遇到安全问题,几乎每周都会公布新的数据泄露事件。面对这种情况,无助的Web开发人员应该如何保护自己呢?
关于本书
Web安全的一个大秘密是—Web漏洞的数量实际上很少(巧合的是,它们可以容纳在一本书中),并且这些漏洞每年变化不大。本书将告诉你需要了解的每一个关键威胁,并且分解保护网站所需要采取的实际步骤。
这本书适合谁
如果你是刚开始进行Web开发,那么这本书将是你的理想指南。无论你是刚刚从计算机科学专业毕业,还是自学成才的新手,我都建议你仔细阅读本书。本书中的所有内容都是必不可少的,并且通过最清晰的示例以最直接的方式进行了解释。现在就为即将面临的威胁做好充分的准备,这将会为你省去很多麻烦。
如果你是一位有经验的程序员,本书对你来说也是有用的。通过学习安全知识,你始终可以从中受益,因此,尝试使用本书来填补你可能遇到的空白。把它当作一本参考书,并深入阅读你感兴趣的章节。没有人能掌握所有的知识,经验丰富的程序员更有责任以身作则,领导好团队,对于Web开发人员来讲,这意味着需要遵循最佳安全实践。
你会注意到,本书并没有特定于某一种编程语言(尽管我会根据需要为主流语言提供各种安全建议)。无论你选择哪种编程语言,对Web安全的良好理解都将使你受益。许多程序员在他们的职业生涯中会使用多种语言,因此学习Web安全的原理比过于关注单个语言类库要更好。
互联网简史
在开始介绍本书的内容之前,回顾一下互联网如何发展到当前状态将非常有用。许多聪明的工程师为互联网的爆炸式增长做出了贡献,但是和大多数软件项目一样,在添加功能时,在安全方面的考虑往往不够。了解安全漏洞是如何产生的将为你提供修复它们所需的相关知识。
万维网(World Wide Web)是蒂姆·伯纳斯-李(Tim Berners-Lee)在欧洲核子研究中心(CERN)工作时发明的。在欧洲核子研究中心进行的研究包括将亚原子颗粒粉碎在一起,希望它们会分裂成更小的亚原子颗粒,从而揭示宇宙的基本结构,但这种研究可能会在地球上造成黑洞。
蒂姆·伯纳斯-李显然对实现宇宙终结不感兴趣,他在欧洲核子研究中心工作期间发明了我们今天所知的互联网—作为大学间共享研究结果的一种手段。他发明了第一个Web浏览器和第一个Web服务器,并发明了超文本标记语言(HTML)和超文本传输协议(HTTP)。世界上第一个网站于1993年上线。
早期的网页只支持文本格式。第一款能够显示嵌入图像的浏览器是美国国家超级计算应用中心(National Center for Supercomputing Applications)开发的Mosaic。Mosaic的开发者最终加入了Netscape Communications公司,帮助开发了Netscape Navigator,这是第一款广泛使用的Web浏览器。在早期的Web中,大多数页面都是静态的,传输流量没有加密。那是一个简朴的时代!
浏览器中的脚本
快进到1995年,Netscape Communications公司的Brendan Eich花10天时间发明了JavaScript,这是第一种能够嵌入网页的语言。在开发过程中,该语言被称为Mocha,然后重命名为LiveScript,然后再次重命名为JavaScript,最终被正式命名为ECMAScript。没有人喜欢ECMAScript这个名字,尤其是Eich,他声称这听起来像是一种皮肤病。因此,除了最正式的设置外,程序员都继续将其称为JavaScript。
JavaScript的原始版本结合了Java编程语言(因此名字中有Java)的笨拙命名约定、C语言的结构化编程语法、晦涩的基于原型的Self继承以及Eich自己设计的噩梦般的类型转换逻辑。不管是好是坏,JavaScript成了事实上的Web浏览器语言。突然间,网页实现了可交互,并且出现了一系列安全漏洞。黑客通过跨站点脚本(XSS)攻击找到了将JavaScript代码注入页面的方法,互联网变得更加危险。
新的挑战者入场
Netscape Navigator的第一个真正竞争对手是微软的Internet Explorer。Internet Explorer具有两个竞争优势—它是免费的,并且预先安装在微软的Windows系统上。Internet Explorer迅速成为世界上最受欢迎的浏览器,它的图标成为人们学习浏览网页的“互联网按钮”。
微软试图“拥有”网络,导致它向浏览器引入了ActiveX等专有技术。不幸的是,这导致感染用户计算机的病毒(恶意程序)激增。Windows是计算机病毒的主要攻击目标(现在仍然是),而互联网被证明是一种有效的传播途径。
Internet Explorer的主导地位在很多年内都没有受到挑战,直到Mozilla的Firefox发布,然后是Chrome,这是一款由新兴的搜索初创公司Google开发的浏览器。这些新的浏览器加速了互联网标准的发展和创新。然而到目前为止,黑客攻击已经成为一项有利可图的业务,安全漏洞一旦被发现就会迅速被利用。保护浏览器的安全成为厂商的首要任务,网站所有者如果想保护用户,就必须关注最新的安全公告。
编写HTML的机器
Web服务器的发展速度与浏览器技术的一样快。在互联网出现的最初几年,架设网站是学术界的一项小众爱好。大多数大学都使用开源操作系统Linux。1993年,Linux社区实现了公共网关接口(Common Gateway Interface,CGI),允许网站管理员轻松创建由相互链接的静态HTML页面组成的网站。
更有趣的是,CGI允许通过脚本语言(如Perl或PHP)生成HTML,因此网站所有者可以根据存储在数据库中的内容动态创建页面。PHP最初是指个人主页(Personal Home Page),当时的目的是让每个人都可以运行自己的Web服务器,而不是将所有个人信息上传给一个数据隐私政策有问题的社交媒体巨头。
PHP普及了模板文件的概念—带有嵌入式处理标签的HTML,这可以通过PHP运行时引擎来提供。动态PHP网站(例如Facebook的最早版本)在互联网上蓬勃发展。然而,动态服务器代码引入了一类全新的安全漏洞。黑客通过注入攻击在服务器上运行自己的恶意代码,或者通过目录遍历来探索服务器的文件系统。
一系列“管道”
网络技术的不断革新意味着当今的互联网大部分由我们认为的“旧”技术驱动。软件趋于达到足以发挥作用的程度,然后进入“维护”模式,只有在绝对必要时才进行更改。对于需要24×7全天候在线的Web服务器来说尤其如此。黑客会在互联网上扫描使用较旧技术的易受攻击的站点,因为这类站点经常会出现安全漏洞。我们仍在解决十年前首次发现的安全问题,这就是为什么我在本书中描述了可能影响网站的每个主要安全缺陷。
与此同时,互联网继续以前所未有的速度增长!汽车、门铃、冰箱、灯泡和猫砂托盘等日常设备的互联网化趋势为攻击打开了一个新的载体。连接到物联网的设备越简单,自动更新安全功能的可能性就越小。这引入了大量不安全的互联网节点,为僵尸网络提供了丰富的托管环境,恶意软件代理可以被黑客远程安装和控制。如果你的网站是攻击者的目标,这会给他们提供很大的潜在火力。
首先要担心什么
Web开发人员很容易因保护网站过程中所遇到的困难而产生挫败感。不过你应该抱有希望:一群安全研究人员正在勇敢地发现、记录和修复安全缺陷。确保你的网站安全的工具是随时可用和易用的。
了解最常见的安全漏洞,并知道它们是如何被利用的,将保护你的系统免受99%的攻击。总是会有一些技术水平极高的对手来攻击你的系统,但是除非你正在运行核反应堆项目,否则这种想法不应该让你夜不能寐。
本书内容
本书分为18章。其中第1~5章介绍互联网的工作原理等内容,第6~18章深入研究需要防御的特定漏洞。具体如下:
第1章:让我们了解黑客如何入侵一个网站
在本章,你将了解黑客入侵网站有多么容易。这是一件很可怕的事情,所以你买这本书就对了。
第2章:互联网的工作原理
互联网的“管道”运行在互联网协议(Internet Protocol,IP)上,互联网协议是一系列网络技术,可以使世界各地的计算机无缝通信。我们将了解TCP、IP地址、域名和HTTP,并了解如何在网络上安全地传输数据。
第3章:浏览器的工作原理
用户通过浏览器与你的网站进行交互,那里可能有许多安全漏洞。你将学习浏览器如何呈现网页,以及如何在浏览器安全模型中执行JavaScript代码。
第4章:Web服务器的工作方式
你为网站编写的大多数代码都将在Web服务器环境中运行。Web服务器是黑客的主要目标。本章介绍它们如何提供静态内容,以及如何使用动态内容(如模板)合并来自数据库和其他系统的数据。你还将学习用于Web开发的一些主要编程语言,并回顾每种语言的安全性和注意事项。
第5章:程序员的工作方式
本章介绍如何编写网站代码并养成良好的习惯,以减少错误和安全漏洞带来的风险。
第6章:注入攻击
你将通过了解可能遇到的最讨厌的威胁之一—黑客注入代码并在你的服务器上执行代码—开始对网站漏洞的研究。当你的代码与SQL数据库或操作系统对接时,通常会发生这种情况,或者攻击可能包含注入Web服务器进程本身的远程代码。你还将看到黑客如何利用文件上传功能注入恶意脚本。
第7章:跨站点脚本攻击
在本章,你将了解用于将恶意JavaScript代码“走私”到浏览器环境中的攻击,以及如何防范这些攻击。跨站点脚本有三种不同的方法(存储型、反射型的和基于DOM),你将学习如何防范每种XSS类型攻击的方法。
第8章:跨站点请求伪造攻击
你将看到黑客如何使用伪造攻击来诱骗用户执行有害行为。这是互联网上的常见问题,你需要相应地保护你的用户。
第9章:破坏身份认证
如果用户注册了你的网站,那么你必须确保他们账户的安全性。你将了解黑客用来绕过登录的各种方法,从暴力破解密码到用户枚举。你还将了解如何在数据库中安全地存储用户账号和密码。
第10章:会话劫持
你将看到用户登录后黑客如何对他们的账户进行劫持,并将学习如何编译网站并安全地处理cookie以减轻这种风险。
第11章:权限
了解如何防止具有恶意的人使用提权来访问网站的禁止区域。特别是你在URL中引用文件时,黑客将尝试使用目录遍历来浏览文件系统。
第12章:信息泄露
网站泄露的信息可能会导致其他漏洞出现。本章将告诉你如何应对这种情况。
第13章:加密
本章介绍如何正确使用加密,并解释为什么加密在互联网上很重要。你需要具备一些简单的数学知识。
第14章:第三方代码
你将学习如何管理他人代码中的漏洞。你运行的大多数代码都将由其他人编写,并且你应该知道如何保护它!
第15章:XML攻击
你的Web服务器可能会解析XML,并且可能容易受到本章所述的各种攻击。在过去的几十年中,XML一直是黑客攻击中持续流行的攻击媒介,所以请当心!
第16章:不要成为帮凶
如本章所述,你可能无意间充当了对他人进行黑客攻击的帮凶。一定要堵住这些安全漏洞,做一个好的互联网公民。
第17章:拒绝服务攻击
在本章中,我将向你展示拒绝服务攻击(DoS)如何操纵大规模的网络流量使你的网站宕机。
第18章:总结
最后一章是一个备忘录,帮你回顾在本书中学到的安全相关的关键要素,并概括你在考虑安全性时应该使用的高级原则。

上架指导

计算机\安全

封底文字

随着互联网技术的迅猛发展,Web应用程序越来越普及,这让攻击者发现了新的攻击途径。结合我十几年的从业经验来看,Web应用程序已经成为攻击者的重要入侵目标,并且容易成功。近十几年,OWASP每隔一段时间都会公布排名TOP10的Web漏洞和缺陷,并且TOP5的变化不大,这也说明Web应用程序开发人员仍然缺乏安全意识,Web开发安全没有得到足够的重视。本书由浅入深,详细解释了Web开发中应该注意的方方面面,值得Web开发人员深入学习。
影子Sh@dow 资深安全攻防从业者

作为一名软件产品(基于B/S架构)研发负责人,除了要对产品本身的功能负责,还需要对产品自身的安全性负责。这些年的亲身经历和实践告诉我,Web开发安全应该得到所有开发人员的重视。软件产品(包括Web应用)的开发者需要对安全有足够的了解,在开发过程中时刻注意安全问题,但相关的书籍资料较少,这导致Web开发人员有时会无从下手。本书对于Web开发人员来说无疑是雪中送炭,非常值得仔细阅读。
刘光磊 上海碳泽研发总监
当你让一个网站上线时,你就让它面临着受到攻击的风险。本书将介绍为何你的网站容易受到攻击以及如何保护它们,分解主要安全漏洞和各种真实攻击,并结合大量代码展示修复方法。

通过本书你将学会:
如何防止SQL注入攻击、恶意的JavaScript和跨站请求伪造。
如何添加认证和形状访问控制以保护账户。
如何锁定用户账户,防止攻击者依靠猜测密码、窃取会话、升级权限进行攻击。
如何实施加密。
如何管理遗留代码中的漏洞。
如何防止披露漏洞的信息泄密。
如何防御高级攻击,如恶意广告和拒绝服务。

随着你在识别和修复漏洞方面变得更加强大,你将学会部署有规律的安全代码,并成为更好的程序员。

译者序

互联网上有各种有价值的信息,保护互联网安全是一项艰巨的任务。Web应用发布后立即为数百万用户所使用,这其中也包括大量具有不良意图的“用户”。面对这种情况,Web开发人员应该在开发过程中时刻注意安全方面的考量。
本书内容浅显易懂,覆盖了在Web开发过程中需要注意的各种安全问题,分享了典型Web漏洞,给出了保护Web应用需要遵循的最佳实践;在内容安排上由浅入深,帮助读者系统地学习和理解Web开发安全知识。近几年,从欧美到国内都出现了一批针对开发安全的初创公司,SecDevOps(安全、开发、运营)的概念也得到了广泛传播。开发安全(Web开发是软件开发中的重要组成部分)变得越来越重要。好好学习本书的内容,你一定会受益匪浅。本书的最后一章还总结了Web安全的21条戒律,可以帮助你记住每章的关键内容。按照这些简单的步骤进行操作,你的Web应用被黑客入侵的可能性将接近于零。
本书作者具有丰富的Web开发经验和培训经验,本书是他20多年宝贵经验的结晶,非常值得仔细阅读和借鉴。
侯亮先生作为本书的合译者,具有丰富的网络安全攻防经验,提供了宝贵的专业支持,在此深表感谢。
感谢上海碳泽信息科技有限公司Web开发团队的大力支持。
没有网络安全就没有国家安全。最后,让我们一起努力为祖国的网络安全行业添砖加瓦,创造更安全的未来!

贾玉彬

图书目录

译者序
前言
关于作者
关于技术审校
致谢
第1章 让我们了解黑客如何入侵一个网站 1
1.1 软件漏洞和暗网 1
1.2 黑客如何攻击网站 2
第2章 互联网的工作原理 5
2.1 互联网协议套件 5
2.1.1 IP地址 6
2.1.2 域名系统 6
2.2 应用层协议 7
2.3 状态连接 11
2.4 加密 12
2.5 小结 12
第3章 浏览器的工作原理 13
3.1 页面呈现 13
3.1.1 渲染管道:概述 14
3.1.2 文档对象模型 14
3.1.3 样式信息 15
3.2 JavaScript 16
3.3 渲染前后:浏览器执行的所有其他操作 18
3.4 小结 18
第4章 Web服务器的工作方式 20
4.1 静态资源 20
4.1.1 URL解析 21
4.1.2 内容交付网络 22
4.1.3 内容管理系统 22
4.2 动态资源 24
4.2.1 模板 24
4.2.2 数据库 25
4.2.3 分布式缓存 27
4.2.4 Web编程语言 28
4.3 小结 32
第5章 程序员的工作方式 33
5.1 阶段1:设计与分析 34
5.2 阶段2:编写代码 34
5.2.1 分布式版本控制与集中式版本控制 35
5.2.2 分支和合并代码 35
5.3 阶段3:发布前测试 36
5.3.1 覆盖范围和持续集成 37
5.3.2 测试环境 37
5.4 阶段4:发布过程 38
5.4.1 发布期间标准化部署的选项 39
5.4.2 编译过程 41
5.4.3 数据库迁移脚本 41
5.5 阶段5:发布后的测试和观察 42
5.5.1 渗透测试 42
5.5.2 监控、日志记录和错误报告 42
5.6 依赖管理 43
5.7 小结 44
第6章 注入攻击 45
6.1 SQL注入 46
6.1.1 什么是SQL 46
6.1.2 SQL注入攻击剖析 47
6.1.3 缓解措施1:使用参数化语句 49
6.1.4 缓解措施2:使用对象关系映射 50
6.1.5 额外缓解:使用纵深防御 51
6.2 命令注入 52
6.2.1 命令注入攻击剖析 53
6.2.2 缓解措施:转义控制字符 54
6.3 远程代码执行 55
6.3.1 远程代码执行剖析 56
6.3.2 缓解措施:在反序列化期间禁用代码执行 56
6.4 文件上传漏洞 57
6.4.1 文件上传攻击剖析 57
6.4.2 缓解措施 59
6.5 小结 60
第7章 跨站点脚本攻击 62
7.1 存储型跨站点脚本攻击 62
7.1.1 缓解措施1:转义HTML字符 64
7.1.2 缓解措施2:实施内容安全策略 66
7.2 反射型跨站点脚本攻击 67
7.3 基于DOM的跨站点脚本攻击 69
7.4 小结 71
第8章 跨站点请求伪造攻击 72
8.1 CSRF攻击剖析 72
8.2 缓解措施1:遵循REST原则 73
8.3 缓解措施2:使用anti-CSRF cookie 74
8.4 缓解措施3:使用SameSite cookie属性 75
8.5 额外的缓解措施:敏感动作需要重新验证 76
8.6 小结 77
第9章 破坏身份认证 78
9.1 实施身份认证 78
9.1.1 HTTP本地身份认证 79
9.1.2 非本地认证 80
9.1.3 暴力破解攻击 80
9.2 缓解措施1:使用第三方身份认证 81
9.3 缓解措施2:与单点登录集成 81
9.4 缓解措施3:保护自己的身份认证系统 82
9.4.1 需要用户名、电子邮件地址或两个都要 82
9.4.2 要求复杂密码 85
9.4.3 安全地存储密码 85
9.4.4 多因素身份认证 87
9.4.5 实现并保护注销功能 88
9.4.6 防止用户枚举 88
9.5 小结 89
第10章 会话劫持 91
10.1 会话的工作方式 91
10.1.1 服务器端会话 92
10.1.2 客户端会话 93
10.2 攻击者如何劫持会话 95
10.2.1 cookie窃取 95
10.2.2 会话确定 97
10.2.3 利用弱会话ID 98
10.3 小结 99
第11章 权限 100
11.1 提权 100
11.2 访问控制 101
11.2.1 设计授权模型 101
11.2.2 实施访问控制 103
11.2.3 测试访问控制 104
11.2.4 添加审计记录 105
11.2.5 避免常见的疏忽 105
11.3 目录遍历 105
11.3.1 文件路径和相对文件路径 106
11.3.2 目录遍历攻击剖析 106
11.3.3 缓解措施1:信任你的Web服务器 107
11.3.4 缓解措施2:使用托管服务 108
11.3.5 缓解措施3:使用间接文件引用 108
11.3.6 缓解措施4:净化文件引用 108
11.4 小结 109
第12章 信息泄露 111
12.1 缓解措施1:禁用Telltale Server标头 111
12.2 缓解措施2:使用干净的URL 111
12.3 缓解措施3:使用通用cookie参数 112
12.4 缓解措施4:禁用客户端错误报告 112
12.5 缓解措施5:缩小或模糊处理JavaScript文件 113
12.6 缓解措施6:清理客户端文件 113
12.7 始终关注安全公告 114
12.8 小结 114
第13章 加密 115
13.1 Internet协议中的加密 115
13.1.1 加密算法、哈希和消息身份认证代码 116
13.1.2 TLS握手 118
13.2 启用HTTPS 120
13.2.1 数字证书 120
13.2.2 获取数字证书 121
13.2.3 安装数字证书 123
13.3 攻击HTTP(和HTTPS) 126
13.3.1 无线路由器 126
13.3.2 Wi-Fi热点 127
13.3.3 互联网服务提供商 127
13.3.4 政府机构 127
13.4 小结 128
第14章 第三方代码 129
14.1 保护依赖项 129
14.1.1 知道你正在运行什么代码 130
14.1.2 能够快速部署新版本 132
14.1.3 对安全问题保持警惕 133
14.1.4 知道什么时候升级 134
14.2 保护配置 134
14.2.1 禁用默认凭据 135
14.2.2 禁用开放目录列表 135
14.2.3 保护你的配置信息 135
14.2.4 加固测试环境 136
14.2.5 保护管理前端 136
14.3 保护你使用的服务 137
14.3.1 保护你的API密钥 137
14.3.2 保护你的webhook 138
14.3.3 第三方提供的安全内容 138
14.4 服务作为攻击媒介 139
14.4.1 警惕恶意广告 140
14.4.2 避免恶意软件传递 140
14.4.3 使用信誉良好的广告平台 141
14.4.4 使用SafeFrame 141
14.4.5 定制广告偏好设置 142
14.4.6 审查并报告可疑广告 142
14.5 小结 142
第15章 XML攻击 144
15.1 XML的使用 145
15.2 验证XML 145
15.3 XML炸弹 147
15.4 XML外部实体攻击 148
15.5 保护你的XML解析器 150
15.5.1 Python 150
15.5.2 Ruby 150
15.5.3 Node.js 150
15.5.4 Java 150
15.5.5 .NET 151
15.6 其他考虑 151
15.7 小结 151
第16章 不要成为帮凶 153
16.1 电子邮件欺诈 154
16.1.1 实施发件人策略框架 155
16.1.2 域密钥标识邮件 155
16.1.3 保护你的电子邮件:实用步骤 156
16.2 伪装电子邮件中的恶意链接 156
16.2.1 开放重定向 157
16.2.2 防止开放重定向 157
16.2.3 其他考虑 158
16.3 点击劫持 158
16.4 服务器端请求伪造 160
16.5 僵尸网络 161
16.6 小结 162
第17章 拒绝服务攻击 163
17.1 拒绝服务攻击类型 163
17.1.1 互联网控制消息协议攻击 164
17.1.2 传输控制协议攻击 164
17.1.3 应用层攻击 164
17.1.4 反射和放大攻击 165
17.1.5 分布式拒绝服务攻击 165
17.1.6 无意拒绝服务攻击 166
17.2 拒绝服务攻击的缓解措施 166
17.2.1 防火墙和入侵防御系统 166
17.2.2 DDoS保护服务 167
17.2.3 规模扩展 167
17.3 小结 168
第18章 总结 170

教学资源推荐
作者: [加] 林晓东(Xiaodong Lin) 著
作者: [德] 迈克尔·威尔森巴赫(Michael Welschenbach)著
作者: 周学广 刘艺
作者: (美)Charles P.Pfleeger,Shari Lawrence Pfleeger
参考读物推荐
作者: 武新华 李书梅 编著
作者: (美)James Broad,Andrew Bindner 著
作者: (美)Jeff Forristal 等
作者: 封面署名:黄连金 吴思进 曹锋 季宙栋 等编著扉页署名:黄连金 吴思进 曹锋 季宙栋 马臣云 达摩 李恩典 徐浩铭 翁俊杰 编著