PHP安全之道 项目安全的架构、技术与实践

978-7-115-51527-8
作者: 栾涛
译者:
编辑: 李莎

图书目录:

详情

本书主要面向PHP 研发人员,详细讲解PHP 项目漏洞的产生原理及防范措施,帮助研发人员在项目研发过程中规避风险。 全书共有10章。第1章讲述PHP项目安全问题的主要形成原因以及解决PHP项目安全问题的原则;第2章讲述PHP项目安全的基础,以使研发人员了解PHP语言自身的安全机制;第3章通过讲解PHP编码过程中需要注意的安全问题,帮助研发人员正确运用PHP函数及变量转换;第4章阐述常见的漏洞并给出了相应的处理方式,涉及SQL注入漏洞、XML注入漏洞、邮件安全、PHP组件安全、文件包含安全、系统命令注入等方面, 帮助研发人员在项目初期即能有效防范漏洞问题;第5章讲述PHP与客户端交互过程中 存在的安全隐患及解决方案,包括浏览器安全边界、客户端脚本攻击、伪造劫持等一系列和客户端相关的安全防护;第6章讲述在PHP项目中常用的加密方式及其应用场景;第7章讲述PHP项目安全的进阶知识,帮助研发人员在更高的角度防范风险;第8章从PHP业务逻辑安全的角度讲述每个业务场景的安全防范路径,以进一步提升研发人员在PHP项目实战中对安全问题的认识,并提高解决具体业务安全问题的能力;第9章讲述PHP的各种支撑软件的安全应用问题;第10章讲述如何建立有安全保障的企业研发体系。 对于PHP项目的安全问题,本书不仅进行了系统性的阐释,给出了体系化的安全问 题解决之道,还通过丰富的小示例帮助读者在平常工作中得以见微知著,并能防微杜渐,增强安全意识,提高安全警惕,不放过任何威胁到项目安全的“细枝末节”。因而,本书不仅适合PHP 研发人员,也适合网络安全技术人员参阅。

图书摘要




PHP安全之道:项目安全的架构、技术与实践


栾涛 著






人民邮电出版社

北京

图书在版编目(CIP)数据

PHP安全之道:项目安全的架构、技术与实践/栾涛著.--北京:人民邮电出版社,2019.11

ISBN 978-7-115-51527-8

I.①P... II.①栾... II.①PHP语言一程序设计 IV.①TP312 8

中国版本图书馆CIP数据核字(2019)第220534号

◆著   栾 涛

责任编辑 李 莎

责任印制 马振武

◆ 人民邮电出版社出版发行 北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

涿州市京南印刷厂印刷

◆ 开本:787×1092 1/16

印张:19.5

字数:345千字  2019年11月第1版

印数:1-2500册  2019年11月河北第1次印刷

定价:79.00元

读者服务热线:(010)81055410 印装质量热线:(010)81055316

反盗版热线:(010)81055315

广告经营许可证:京东工商广登字20170147号

内容提要

本书主要面向PHP研发人员,详细讲解PHP项目漏洞的产生原理及防范措施,帮助研发人员在项目研发过程中规避风险。

全书共有10章。第1章讲述PHP项目安全问题的主要形成原因以及解决PHP项目安全问题的原则;第2章讲述PHP项目安全的基础,以使研发人员了解PHP语言自身的安全机制;第3章通过讲解PHP编码过程中需要注意的安全问题,帮助研发人员正确运用PHP函数及变量转换;第4章阐述常见的漏洞并给出了相应的处理方式,涉及SQL注入漏洞、XML注入漏洞、邮件安全、PHP组件安全、文件包含安全、系统命令注入等方面,帮助研发人员在项目初期即能有效防范漏洞问题;第5章讲述PHP与客户端交互过程中存在的安全隐患及解决方案,包括浏览器安全边界、客户端脚本攻击、伪造劫持等一系列和客户端相关的安全防护;第6章讲述在PHP项目中常用的加密方式及其应用场景;第7章讲述PHP项目安全的进阶知识,帮助研发人员在更高的角度防范风险;第8章从PHP业务逻辑安全的角度讲述每个业务场景的安全防范路径,以进一步提升研发人员在PHP项目实战中对安全问题的认识,并提高解决具体业务安全问题的能力;第9章讲述PHP的各种支撑软件的安全应用问题;第10章讲述如何建立有安全保障的企业研发体系。

对于PHP项目的安全问题,本书不仅进行了系统性的阐释,给出了体系化的安全问题解决之道,还通过丰富的小示例帮助读者在平常工作中得以见微知著,并能防微杜渐,增强安全意识,提高安全警惕,不放过任何威胁到项目安全的“细枝末节”。因而,本书不仅适合PHP研发人员,也适合网络安全技术人员参阅。

在第六届中国互联网安全大会(Internet Security Conference,ISC)前夕,从栾涛这里得知本书已完成编写,欣喜之余我认真翻阅,认为此书对改善网络安全状况具有积极意义。

IT系统的漏洞是网络安全问题的根源,而漏洞的产生往往是IT系统研发人员“不知不觉”导致的,如安全意识不强、工作疏忽以及安全防范技能有所欠缺等。近几年,随着全球信息化程度及互联网化程度的提高,越来越多的系统承载在Web之上,所以,如果能在Web系统的设计、研发之初即避免漏洞,就能有效地减少网络安全问题的产生,从而在一定程度上改善整个网络的安全状况。

栾涛所著的这本书,依托他多年来在实际研发过程中所积累的宝贵经验,讲述了PHP项目安全研发的方方面面,深度剖析了安全问题的各种场景,能让PHP研发人员了解安全原理与安全风险,从而引导研发人员对PHP项目安全问题进行思考,提高安全意识和技能。据万维网技术调查(W3Techs)统计,全球80%的Web系统是使用PHP语言研发的,可见,从代码安全的角度做好PHP项目的意义重大。此外,目前市场上专业的安全技术类图书大多是面向信息安全人员的,面向研发人员的非常少,研发教程类图书基本上缺乏关于安全问题的章节,可以说本书将帮助PHP从业人员提高对PHP项目安全的认知。

栾涛与我在360企业安全集团共事期间,全程参与了漏洞扫描、安全防护、系统监控等产品研发项目,正是因为他在这些项目上的深厚积累,使得他具备了良好的安全意识与技能。客观地说,他主导研发的系统几乎很难找到安全漏洞。我曾鼓励他将安全经验整理成书,今日得知书成,特为之作序,颇感荣幸与欣慰。

我相信这本书会给广大研发人员带来很多帮助,从而为互联网安全状况的改善发挥积极作用。

欧怀谷

奇安信集团 副总裁

推荐语录

潘剑锋│奇虎360首席安全架构师

PHP是最流行的Web开发语言之一,但要找到一本关于PHP研发安全的优秀图书却并不容易。本书作者总结其在该领域的丰富经验,深入浅出地介绍了相关安全问题及解决之道。本书适合PHP研发人员、安全从业人员以及对安全攻防技术感兴趣的人员阅读。

韩天峰│Swoole开源项目创始人、学而思网校首席架构师

随着互联网技术的大规模应用,企业用户和个人用户的大量信息存在于网络服务中,安全问题变得越来越重要。据万维网技术调查(W3Techs)统计,全球有80%的网站是使用PHP语言编写的,而这些网站程序中或多或少会存在一些安全隐患。本书是专门为PHP编写的安全指南,内容详尽、细节严谨,非常值得PHP研发人员阅读。

刘焱(兜哥)│百度安全实验室AI安全负责人

我一直认为PHP是世界上最棒的开发语言之一,不仅仅是因为它使用广泛,更是因为它简洁且功能强大的语法,寥寥几行就可以完成其他语言几十行才能完成的功能。但从安全角度看,PHP的确算不上一门让人省心的语言,各类安全漏洞让人“应接不暇”。栾涛的这本书详细介绍了PHP应用常见的安全问题及其防护手段,无论是对于研发人员还是对于安全工作者,都将是一本很好的工具书。

陈雷│《PHP 7底层设计与源码实现》图书作者

很多PHP研发人员在开发PHP应用程序时,更多的是关注业务实现,对PHP开发中的安全问题并没有太多关注,但安全隐患往往不少,一旦出现安全问题,则会带来非常严重的后果。目前虽然有很多安全技术方面的图书,但专注于PHP安全的图书和资料较为匮乏,而本书的出版可谓是及时雨,我相信它能给PHP研发人员提供很好的帮助,使其在安全问题方面少走很多弯路。

刘健皓│奇虎360智能网联汽车安全事业部负责人

随着科技发展和产业升级,软件开发正在重新定义整个世界,互联网、大数据、人工智能等技术改变了人们的生活方式。但是软件是由人编写的,是人就有可能犯错误,不可避免地会出现安全漏洞。与此同时,由于安全漏洞造成的安全风险也将威胁到世界、威胁到国家、威胁到人们的人身及财产安全。这本书由栾涛这位曾服务于奇虎360企业的资深安全技术人员,根据自己丰富的实战经历总结著作而成,其内容实用,结构清晰,言简意赅,可读性强。通过阅读此书,研发人员可以在PHP程序开发过程中提高信息安全意识,并能主动地全面考虑安全问题,以避免漏洞的产生,让编写出来的代码更为安全、可靠。总之,这是一本值得PHP研发人员学习参考的图书。

王枭卿│奇安信网站安全事业部负责人

很高兴可以读到这样一本从研发角度出发,分享在实际工作中所积淀的安全编程心得的图书。本书涉及PHP项目中多种应当重视的安全问题,因而它作为PHP研发人员提升安全认识、实现安全编程的参考用书,再合适不过了。

白健│补天平台(全国最大的漏洞响应平台之一)负责人

作为一名资深的Web安全产品开发者,栾涛结合自己多年的工作经验,对PHP语言的安全问题进行了深入浅出的分析和总结。这本书系统地介绍了研发人员如何有效规避PHP项目的安全问题,是广大PHP研发人员的案头宝典!

马勇(znsoft)│网络空间安全博士

PHP犹如网站开发语言中的瑞士军刀,灵活方便却充满危险性。本书从安全角度描述了PHP开发中所需要规避的风险,让PHP新手和高级研发人员都能开发出成熟稳健的后台程序,从而能更好地使用这把锋利的瑞士军刀。

王晶(半桶水)│滴滴出行高级架构师

随着互联网的发展,信息越来越透明,但随之而来的巨大挑战却是安全问题,涉及信息、数据、隐私等方面。作为在奇虎360企业奋战于信息安全一线的“先锋战士”,栾涛敏锐地洞察到:与其出了问题再“亡羊补牢”,不如在应用软件开发之初防患于未然。因而他便以“PHP项目如何安全地研发”为切入点,将自己多年在项目研发和安全防范工作中积累的知识与经验记录下来,并进行全面的归类整理,编写成此书。该书详细介绍了各类PHP项目安全问题到底是如何产生的,又该如何解决,其知识点讲解透彻,实战性强,我认为不只PHP项目研发人员需要仔细研读,几乎所有基于Web的项目研发人员都能从中获益。

李强│中国科学技术大学计算机学院博士

我从1999年开始使用Linux操作系统进行研发工作,在这过程中自然而然地接触到LAMP架构中的PHP、Perl和Python等语言,其中PHP以灵活性好、开发速度快、适用场景广令我印象深刻,而我也使用PHP成功开发了嵌入式的打印机管理系统及普通Web系统等多个产品。栾涛多年来一直从事Web安全研发工作,技术功底深厚,我非常欣喜地看到他能将自己在PHP项目安全方面所积累的弥足珍贵的经验编写成此书,我相信该书在信息安全方面会给PHP研发人员带来一种崭新的工作视角。

吉跃奇│滴滴企业级事业部总经理

在企业业务系统设计上,我始终坚持安全第一,持续优化体验,不断提升效率的工作准则。PHP简单易学,开发效率高,为企业业务系统的实现提供了强大的支撑,但随着业务体量的不断增长,安全则成为重中之重。该书集中梳理PHP项目中可能存在的安全风险,帮助PHP研发人员提高安全意识,使其有意识亦有能力守住安全红线,避免所开发的项目因安全问题造成严重损失,从而为企业的系统安全更好地保驾护航。

石东海│滴滴高级技术总监

PHP因简单易学和研发效率高而备受程序员关注,越来越多的大型平台使用PHP作为主要研发语言,但PHP历来被大家诟病的安全问题,给平台的信息安全和交易安全带来了巨大的风险。栾涛在多年的业务系统研发过程中,累积了大量实战经验,经过体系化的思考和梳理,编写了此书。本书言简意赅,深入浅出,不仅完整介绍了PHP安全问题的全貌和漏洞原理,而且结合实际应用场景,详细介绍了各类问题的解决方案,是一本难得的既有理论高度,又能指导实际工作的PHP安全研发宝典,非常值得推荐。

高磊(安惞)│阿里巴巴安全运营专家

“安全编码”是企业应用安全软件生命周期中非常重要的一环,因而让研发人员更好地理解和实现安全开发,一直是安全从业者努力的方向。栾涛从研发视角出发,结合多年关于信息安全的学习和实践经验编写了这本书。该书对于PHP项目安全问题的条分缕析,能很好地帮助研发人员深刻认识到“风起于青萍之末”,并拥有一定的防微杜渐之能,这对企业的安全建设无疑具有非常重要的作用。

前言

作为资深的PHP“码农”,多年来无论面对多么复杂的项目,我总是能带领研发团队顺利攻破难关,满足各种需求,甚至超出预期。但是无论多么努力,总是会出现各种安全问题,我自己也一直被安全问题所困扰。因此,我一直在寻觅面向研发人员的项目安全类图书,但是不尽如人意。市场上针对各种漏洞进行挖掘的图书应有尽有,所面向的读者大都是白帽子、信息安全人员,提供给研发人员,帮助其对系统进行加固、防止漏洞产生的安全类图书却很少。

安全无小事,企业系统应根据自己的业务特点,建立安全红线,特别是在涉及人身、资金、敏感信息等方面,需要在效率、增长、系统性能做出取舍的情况下,确保把安全放在第一位。

如果一个企业连基本的人身、资金、敏感信息等方面的安全都不重视,那么一旦出现问题,就会给企业造成致命的伤害。如果漏洞被攻击者发现并利用,造成的人身损害、企业名誉损失、资金损失、信息损失等基本上是无法弥补的。

在网络安全问题日益突出的今天,必须对网站系统的安全加以重视。只要加以重视,大部分安全问题就可以在系统的研发阶段消灭掉。然而,大多数研发人员只注重代码功能的实现,没有考虑到业务的安全问题,也没有考虑到编码的安全问题,这将给企业和互联网带来严重的安全隐患。

因一个很好的机遇,我加入了奇虎360企业,非常幸运地和很多安全专家一起共事,这使我对安全有了新的认知,同时也丰富了我的安全知识。在不断学习中,我将研发项目时积累的经验记录下来汇成此书,希望能给PHP研发人员提供帮助。

│本书的定位│

本书面向的读者是PHP研发人员。经统计,90%的安全问题是由于研发人员缺乏安全意识造成的。本书阐述了一些漏洞的产生原理及防范措施,希望可以帮助PHP研发人员提高安全意识。本书不是为了让研发人员去做一个白帽子或者攻击者,而是为了更好地帮助研发人员进行系统的安全加固,在项目的研发过程中重视项目安全,合理编码,从根本上解决PHP项目的安全问题。

│致谢│

能认识欧总(欧怀谷)是我的荣幸,感谢欧总在工作上对我的悉心指导,并将多个Web安全业务交给我负责,这对我经验的积累以及编写此书起着决定性作用。非常感谢欧总在百忙之中为本书题写序言。

栾涛

名词解释

│漏洞│指一个系统存在的弱点或缺陷,可能来自应用软件或操作系统设计时的缺陷或编码时产生的错误,也可能来自业务在交互处理过程中的设计缺陷或逻辑流程上的不合理之处。

漏洞可能被有意或无意地利用,从而对一个组织的资产或运行造成不利影响,如信息系统被攻击或控制、重要资料被窃取、用户数据被篡改、系统被作为入侵其他主机系统的跳板。

│白帽子│也称为白帽黑客,指能够识别计算机系统或网络系统中安全漏洞的安全技术专家,但他们并不会恶意利用漏洞,而是提交给企业,帮助企业在被其他人恶意利用之前修补漏洞,以维护计算机和互联网安全。

│攻击者│本书中统一将针对缺陷实施攻击的人称为攻击者。这里的缺陷,包括软件缺陷、硬件缺陷、网络协议缺陷、管理缺陷和人为失误。

第1章 PHP项目安全概述

PHP被称为全世界最好用的Web开发语言之一,其独特的语法混合了C、Java、Perl以及PHP自创的语法。因在研发业务逻辑上简单易用,PHP已成为一种广受欢迎的脚本语言,尤其适用于Web开发,其程序还可通过C和C++进行扩展,支持几乎所有流行的数据库及操作系统。PHP简单易用,学习门槛低,但在其快速发展的同时安全问题也日益突出,所出现的问题亦不可小觑。

1.1 PHP项目安全形势不容乐观

W3Techs是一个提供各种技术在Web上使用信息统计的平台,图1-1所示是2018年在Web服务端使用动态开发语言的统计数据。从统计结果可以看出,PHP占比达到82%。其次是ASP.NET和Java。

Exploit-db是面向全世界的一个漏洞平台,该平台通过收集和公布漏洞来督促研发人员对系统漏洞进行修复,图1-2是对历史漏洞所用的开发语言进行归类的统计结果。从图中可以看出,90%的Web平台漏洞所使用的开发语言是PHP。通过图1-1和图1-2的对比,很容易得出一个结论:PHP应用得多,由其导致的漏洞也最多。

图1-3是美国国家漏洞库(National Vulnerability Database,NVD)所做的从2008年到2017年的历年常见漏洞类型的统计数据图。从该统计数据图上可以看出,近几年来随着研发框架安全性的不断提高,SQL注入有了明显的改善,但是SQL注入问题依然没有彻底解决;认证问题、跨站点脚本(XSS)、信息泄露/信息披露等漏洞几乎没有改善。

PHP通常用来开发Web应用。对于Web应用来说,传统的Web网络层的防护手段,如防火墙[1]、入侵检测系统[2]、入侵防御系统[3]等,无法阻止或检测到Web应用层的攻击。攻击者一旦发现Web漏洞就可以穿透网络层,直接对后面的业务层数据库、文件系统、服务器发起攻击,毁坏或窃取企业数据。

1.2 PHP项目安全问题产生的原因

研发人员的关注点如图1-4所示,Web设计者或研发人员考虑更多的是如何满足用户应用,如何更好地实现业务。如果研发人员未经过安全编码培训,则很少考虑网站应用研发过程中所存在的漏洞。多数网站设计研发人员、网站维护人员对网站攻防技术的了解甚少,这些漏洞在不关注安全代码设计的人员眼里几乎不可见。

随着业务复杂度的提升,在系统研发过程中,PHP应用程序代码量大,研发人员多,难免会出现疏漏。即使漏洞被修复,由于很多业务系统迭代速度快、升级频繁,人员经常变更,也会导致代码不一致,已修复的漏洞可能又出现在新代码中。同时在很多情况下同一台服务器会运行多个Web系统,即使保证了自己研发的系统没有安全漏洞,但也无法避免系统被感染。

普通用户的关注点如图1-5所示,在正常使用过程中,即便存在安全漏洞,正常的使用者也不会察觉。但由于关注点不同,多数研发人员只注重业务逻辑功能的实现,对安全编码没有足够的认识,网站安全代码设计方面了解甚少,即使发现网站安全存在问题和漏洞,其修复方式只是停留在页面修复,很难针对网站具体的漏洞原理对源代码进行改造。

恶意攻击者的关注点如图1-6所示,攻击者关注的是应用中是否可以输入恶意攻击字符,是否有逻辑缺陷可利用以绕过或者打破系统的信任边界[4],伪装成被信任用户,窃取或劫持正常用户,获取敏感信息。

研发人员、用户、攻击者的考虑和关注角度不同。单个系统的设计和研发人员总是数量有限的少数群体,具体功能可能只有几个人负责,甚至一个人同时研发多个系统,安全知识范围有限,由于系统暴露于公共网络中,与庞大的恶意攻击群体相比形成了攻防的严重不对等,如图1-7所示。

由于攻击者更多的是关注系统的弱点,在非正常状态下使用系统且不关心业务功能逻辑,因此在很多场景中,只要攻击者找到一个系统漏洞,整个系统就将遭到攻击或被攻击者利用去攻击其他系统。

1.3 PHP项目安全原则

存在如此多的安全漏洞,信息随时具有泄漏的风险,因此不得不将安全问题重视起来。如何避免系统被攻击,如何减少漏洞的数量,以及如何修复漏洞,可以从以下几个方面入手。

1.3.1 不可信原则

对Web系统来讲,访问系统的用户几乎都是不被信任的,他们当中隐藏着攻击者。研发人员应该时刻保持警惕性,对所有用户的输入和输出进行检查。

一│检查所有的输入

合法的输入才可以进入流程,这样才能最大限度地保证程序的安全。一般情况下,需要检查的输入内容包括URL、GET、POST、Cookie、Referer、User-Agent等,当用户提交数据时需要根据字段本身的性质进行检查,检查数据长度、范围、格式、类型是否正确,如邮编必须为六位数字、身份证号码必须符合身份证号码的编码规则等。当发现非法数据时,应该立即阻断响应,而不是修复数据,防止发生二次污染或者遭到攻击。

为了进一步提高网站的安全性,应该采用前后端数据检查相结合的方法来完成程序对输入数据的检查,避免只在前端通过客户端脚本完成数据检查的做法,因为攻击者很容易绕过客户端检查程序,如SQL注入攻击等。需要尽量规范用户可以输入的内容,除了限制并过滤输入的非法信息外,还要严禁上传非法文件,防止发生越权、命令执行等漏洞。

二│检查所有的输出

要保障输出数据的合法性,防止输出数据夹杂用户的自定义数据。警惕所有输出数据,所有数据都有被篡改的可能性。特别要注意的是防止邮件内容的输出、短信内容的输出,因为这些输出容易被恶意攻击者利用为钓鱼攻击、非法广告宣传等;防止输出内容中夹杂用户可控的HTML、JavaScript数据,因为攻击者可以通过这些数据控制页面内容、窃取服务器以及用户信息。

三│数据在传输过程中的安全

为了防止传递到服务端和从服务端回传的数据被监听截获以及被篡改,通常的做法是为数据添加时效性,或者将数据进行加密处理,采用合理的方式来保障数据的安全传输。

1.3.2 最小化原则

研发人员在PHP项目中要对用户的每一次访问、每一次数据操作都进行身份认证[5]。确认当前用户的真实身份后,将用户的可见范围控制在允许的最小范围,并去访问用户所拥有的权限和数据。

一│权限最小化

研发人员总是希望用户访问应该访问的页面,不希望用户跳出网站程序的限制,访问到别人的数据,或者直接查看数据库,甚至控制服务器。只授予用户必要的权限,避免过度授权,可以有效地降低系统、网络、应用、数据库被非法访问的概率。

对于服务器目录的权限也应该做出规定。比如,存放上传文件的目录,在绝大多数情况下是不应该有执行权限的,应防止用户通过可执行程序获取服务器权限等。

二│暴露最小化

应用程序需要与外部数据源进行频繁通信,主要的外部数据源是客户端浏览器和数据库。如果你正确地跟踪数据,就可以确定哪些数据被暴露了。公共网络是最主要的暴露源之一,需要时刻小心防止数据被暴露在Web系统上。

数据暴露不一定就意味着安全风险,但数据暴露要尽量最小化。例如,一个用户进入支付系统,在向你的服务器传输他的信用卡数据时,要防止在传输过程中被窃取,你应该用安全套接层(Secure Sockets Layer,SSL)对它加以保护。如果你要在一个确认页面上显示他的信用卡号,由于该卡号信息是由服务端发向他的客户端的,因此你同样要用SSL去保护它。

在上述例子中,显示信用卡号显然加大了暴露的概率。SSL确实可以降低风险,但是比较好的解决方案是通过只显示最后4位数来达到降低风险的目的。

为了降低对敏感数据的暴露率,需要确认什么数据是敏感的,同时跟踪它,并消除所有不必要的数据暴露。在本书中,将会展示一些技巧,以保护一些常见的敏感数据。

1.3.3 简单就是美

PHP之所以流行,就是因为它较其他语言来说简单易懂。研发一个功能正常的系统,需要做到项目易读易维护、系统安全有保障、性能扩展性强,这几个关键要素形成了项目金字塔,如图1-8所示。

功能正常、保障系统可用、业务流程完整,是对一个系统的基本要求。如果一个系统可读性特别差,维护难度高,很容易引起功能异常,项目交付时间会不断被拉长,即使暂时交付,隐藏的问题在后期也会不断地暴露出来,影响用户的正常使用。

一│易读易维护

做一个项目,在保证它能正常满足需求的情况下,易读易维护是第一位,而复杂不仅会滋生错误,而且很容易导致安全漏洞,使得业务功能、系统安全、性能优化无从下手。研发过程中,代码上使用清晰的流程结构,保持逻辑清晰,可以在一定程度上避免安全问题的发生。

二│系统安全有保障

在项目易读易维护、基本功能正常的前提下,再来考虑系统的安全性,对系统进行加固。安全漏洞的存在,轻则功能异常,重则系统崩溃,更有甚者导致数据全部泄露,给用户和企业造成无法挽回的损失。

三│性能扩展性强

一个完美的项目,离不开可靠的性能和良好的扩展性。性能与扩展性依赖于项目的易读易维护性,反之,系统性能优化和扩展将无法进行。随着系统业务量和功能的不断增加,原有的性能和扩展性差的项目将被废弃,企业将不得不重新进行规划和投入更高的研发成本。

1.3.4 组件的安全

为了使网站功能更为强大,可以使用组件,组件在带来强大功能的同时也会带来安全隐患。对于内置组件的使用,应当有明确的使用范围;对于自己注册的组件,必须认真考虑组件的效率和是否有漏洞;对于第三方组件,要明确来源,检测是否有后门程序[6]

如PHP本身的图片处理功能比较弱,通常通过借助第三方组件ImageMagick来加强PHP的图像处理能力。ImageMagick是一个功能强大的开源图形处理软件,可以用来处理的图片格式超过90种,包括流行的JPEG、GIF、PNG、PDF以及PhotoCD等,它可以对图片进行切割、旋转、组合等多种特效处理。

由于功能强大、性能较好,并且对很多语言有拓展支持,因此在程序研发中ImageMagick被广泛使用,比如生成用户头像,编辑图片等。

2016年5月,ImageMagick被曝出命令执行漏洞,虽然危害不是太大,但是由于大量的Web程序使用了其拓展功能,导致这些本地命令执行漏洞在Web环境里可以被远程触发,变成了危害巨大的远程命令执行。

对于此类威胁,研发人员应该时刻关注官方发布的最新补丁,及时升级所用的应用软件,以免恶意攻击者有可乘之机。

扩展阅读

除了编码安全之外,网络操作系统、Web服务器系统及数据库系统本身也会存在安全漏洞。2014年4月7日,互联网安全协议OpenSSL被曝存在一个十分严重的安全漏洞。这个漏洞被命名为心脏出血(Heartbleed),即服务器内核出现了致命内伤。利用该漏洞,攻击者可以获取约30%的以HTTPS开头网址的用户登录账号和密码。国内知名网站几乎都出现问题,其中包括购物、网银、社交、门户等类型网站。OpenSSL在漏洞公布当天发布了修复版本,在短时间内比较大的网站基本修复了。要防止此类漏洞,一定要关注权威机构发布的最新漏洞舆情信息,一定要定时升级,并在发现漏洞时及时更新安全补丁。

更多的组件漏洞,可查阅本书“附录1 PHP各版本漏洞”。

1.4 小结

本章归纳总结了PHP目前的安全状况,呼吁研发人员在研发过程中重视安全问题。

本章探讨了PHP项目安全问题在大环境下所面临的严峻挑战。在攻防严重不对等的今天,不能只依赖基础安全设备和框架来避免所有的安全威胁,每个研发人员都应具备安全研发的能力,以从根本上解决安全问题,避免产生安全问题。同时本章提出了对项目安全开发的要求,无论是在研发过程中还是在生产环境中都要遵守安全原则。

注释

[1] 防火墙是一种将内部网和公众访问网(如Internet)分开的方法,它实际上是一种隔离技术。防火墙是在两个网络通信时执行的一种访问控制尺度,它能允许经内部网“许可”的人和数据进入网络,同时将经内部网“不许可”的人和数据拒之门外,从而最大限度地阻止网络攻击者访问内网络。

[2] 入侵检测系统(Intrusion Detection System,IDS)是一种对网络传输进行即时监视,在发现可疑传输时发出警报或者采取主动反应措施的网络安全设备。与其他网络安全设备的不同之处在于,IDS是一种积极主动的安全防护技术。

[3] 入侵防御系统(Intrusion Prevention System,IPS)是计算机网络安全设施,是对防病毒软件(Antivirus Programs)和防火墙(Packet Filter, Application Gateway)的补充,能够监视网络或网络设备的网络资料传输行为,并能即时中断、调整或隔离一些不正常或者具有伤害性的网络资料传输行为。

[4] 信任边界通常指系统防火墙或应用中的鉴权系统、浏览器的跨域限制等。

[5] 身份验证又称“验证”“鉴权”,是指通过一定的手段完成对用户身份的确认。

[6] 后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法。在软件的研发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。但是,如果这些后门被其他人知道,或是在软件发布之前没有被删除,就会成为安全风险,容易被恶意攻击者当成漏洞进行攻击。

相关图书

CTF快速上手:PicoCTF真题解析(Web篇)
CTF快速上手:PicoCTF真题解析(Web篇)
数字银行安全体系构建
数字银行安全体系构建
软件开发安全之道概念、设计与实施
软件开发安全之道概念、设计与实施
企业信息安全体系建设之道
企业信息安全体系建设之道
内网渗透技术
内网渗透技术
深入浅出密码学
深入浅出密码学

相关文章

相关课程