代码审计:企业级Web代码安全架构(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-22 13:05:34

点击下载

作者:尹毅

出版社:机械工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

代码审计:企业级Web代码安全架构

代码审计:企业级Web代码安全架构试读:

前言

代码审计是指对源代码进行检查,寻找代码中的bug,这是一项需要多方面技能的技术,包括对编程的掌握、漏洞形成原理的理解,系统和中间件等的熟悉。为什么需要代码审计

代码审计是企业安全运营以及安全从业者必备的基础能力。代码审计在很多场景中都需要用到,比如企业安全运营、渗透测试、漏洞研究等。目前已经有不少公司在推广微软的软件SDL(Security Development Lifecycle,安全开发周期),它涵盖需求分析→设计→编码→测试→发布→维护,安全贯穿整个软件开发周期,其中设计、编码和测试是整个SDL的核心,安全问题大多在这里被解决掉。其中在安全设计这块,必须要非常了解漏洞形成原理,纵观全局。而在代码实现也就是编码阶段,安全依靠于编程人员的技术基础以及前期安全设计的完善性。然后是测试,测试包括白盒测试。黑盒测试以及灰盒测试。黑盒测试也叫功能测试,是指在不接触代码的情况下,测试系统的功能是否有bug,是否满足设计需求。而白盒测试就是我们说的代码审计,以开放的形式从代码层面寻找bug,如果发现有bug则返回修复,直到没有bug才允许软件发布上线。

渗透测试人员掌握代码审计是非常重要的,因为我们在渗透过程中经常需要针对目标环境对payload进行调试。另外,如果通过扫描器扫描到Web目录下的一个源码备份包,通常攻击者都会利用源码包找一些配置文件,因为里面有数据库、API等一类配置。如果环境有限制,比如目标站数据库限制连接IP等,那么工具小子可能在源码包进行的漏洞利用也就到此为止。对于懂代码审计的人,结果完全不一样,他可以对源码包进行安全审计,发现网站代码里存在的漏洞,然后利用挖掘到的漏洞进行渗透。编程能力要求

代码审计对编程语言的基础有一定要求,至少要能看得懂代码,这里说的看懂代码不是简单地理解几个if…else语句和for循环,而是能看懂代码的逻辑,即使有很多函数没见过,也是可以到Google去查的。都说编程在语言这块是一通百通,只要我们对编程思想理解得非常透彻,重新接触一种编程语言也是非常快就能上手的,所以不管你之前写过Java还是C#程序,想玩一玩PHP的代码审计都应该不是什么大问题。代码审计环境准备

代码审计首先要准备的是审计环境工具,不同的环境会影响漏洞的利用,所以建议Linux和Windows系统下的PHP环境都搭建一套,并且需要多个PHP版本。关于版本切换这块,建议安装phpStudy,phpStudy是一套Apache+Nginx+LightTPD+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader的集成环境,可以很方便地安装和切换环境。代码审计的工具有很多个,这里推荐使用笔者开发的Seay源代码审计系统以及RIPS,二者都是免费开源工具。

除了自动化审计工具外,还有一些像Burp Suite、浏览器扩展以及编码工具等审计辅助工具也都是必备的。代码审计思路

通常做代码审计都是检查敏感函数的参数,然后回溯变量,判断变量是否可控并且没有经过严格的过滤,这是一个逆向追踪的过程。而代码审计并非这一种手段,还可以先找出哪些文件在接收外部传入的参数,然后跟踪变量的传递过程,观察是否有变量传入到高危函数里面,或者传递的过程中是否有代码逻辑漏洞,这是一种正向追踪的方式,这样的挖掘方式比逆向追踪挖掘得更全。还有一种方式是直接挖掘功能点漏洞,根据自身的经验判断该类应用通常在哪些功能中会出现漏洞,直接全篇阅读该功能代码。

可能不少新手对于学习PHP代码审计还有一些迷茫,或许之前尝试过学习,但一直没有很好的进展,因为代码审计是一门很专的技术活,要学好PHP代码审计,需要掌握以下几点:■ PHP编程语言的特性和基础。■ Web前端编程基础。■ 漏洞形成原理。■ 代码审计思路。■ 不同系统、中间件之间的特性差异。导读

本书总共分为三个部分。第一部分为代码审计前的准备,包括第1章以及第2章,第1章详细介绍我们在学习代码审计前需要了解的PHP核心配置文件以及PHP环境搭建的方法,第2章介绍学习PHP代码审计需要准备的工具,以及这些工具的详细使用方法。

第二部分包括第3~8章,着重介绍PHP代码审计中的漏洞挖掘思路与防范方法。

第3章详细介绍PHP代码审计的思路,包括根据关键字回溯参数、通读全文代码以及根据功能点定向挖掘漏洞的三个思路。

第4~6章讲述常见漏洞的审计方法,分别对应基础篇、进阶篇以及深入篇,涵盖SQL注入漏洞、XSS漏洞、文件操作漏洞、代码/命令执行漏洞、变量覆盖漏洞以及逻辑处理等漏洞。

第7章介绍二次漏洞的挖掘方法,二次漏洞在逻辑上比常规漏洞要复杂,所以我们需要单独拿出来,以实例来进行介绍。

在经过前面几章的代码审计方法学习之后,相信大家已经能够挖掘不少有意思的漏洞。第8章将会介绍代码审计中的更多小技巧,利用这些小技巧可以挖掘到更多有意思的漏洞。每类漏洞都有多个配套的真实漏洞案例分析过程,有助于读者学习代码审计的经验。不过,该章不仅介绍漏洞的挖掘方法,还详细介绍这些漏洞的修复方法,对开发者来说,这是非常有用的一部分内容。

第三部分包括第9~12章,主要介绍PHP安全编程的规范,从攻击者的角度来告诉你应该怎么写出更安全的代码,这也是本书的核心内容:让代码没有漏洞。第9章主要介绍参数的安全过滤,所有的攻击都需要有输入,所以我们要阻止攻击,第一件要做的事情就是对输入的参数进行过滤,该章详细分析discuz的过滤类,用实例说明什么样的过滤更有效果。

第10章主要介绍PHP中常用的加密算法。目前99%以上的知名网站都被拖过库,泄露了大量的用户数据,而这一章将详细说明使用什么样的加密算法能够帮助你增强数据的安全性。

第11章涉及安全编程的核心内容。所有的应用都是一个个功能堆砌起来的,该章从设计安全功能的角度出发,从攻击者的角度详细分析常见功能通常会出现的安全问题,在分析出这些安全问题的利用方式后,再给出问题的解决方案。如果你是应用架构师,这些内容能够帮助你在设计程序功能的时候避免这些安全问题。

第12章介绍应用安全体系建设的两种策略以及实现案例:横向细化和纵深策略,企业的应用安全应把这两种策略深入到体系建设中去。

以上就是本书的全部内容,看到介绍之后你是不是有点儿兴奋呢?赶紧来边读边试吧。感言和致谢

这本书断断续续写了一年多,期间也发生了很多事情。在2014年9月的时候从创新工场旗下项目安全宝离职,加入到阿里巴巴安全部。到了一个新的环境,工作上面倒是很快就融入了进去,只是从北京到杭州,是从一个快节奏的城市转到一个慢节奏的城市,感觉整个人变懒了,没有以前在北京那样每天激情澎湃。曾经一度想过放弃,因为心里总感觉像是被捆住了一样,想去做一些事情却因为还有这本书没写完而不能去做。因为写这本书是我必须要做的事情,一是算是给我自己在安全领域的一个交代,二是我承诺过吴怡编辑,一定会努力写好这本书,在这个事情上我看得很严肃,承诺了就一定要做到。

为什么说这算是给自己在安全领域的一个交代呢?记得跟不少朋友说过,创业是我必定要做的一个事情,或许哪天转行创业了,在这个行业里留下了点东西也心安了。回想自己从最初迷恋上网络安全到现在,中间的一些转折点和小插曲还挺有意思,比如以全校第一的成绩考上重点高中之后,读了一年就退学去离家很远的软件开发培训学校,花500块钱在网吧淘了一台放酷狗都卡得不行的台式机,在重庆连续通宵读书快一年,等等,这些都已经是美好的回忆。在这些美好回忆中遇到很多美好的人,想对他们说声谢谢。

感谢父母和姐姐、姐夫,最早去重庆的时候,姐姐还怀着马上要出生的外甥女,跟姐夫开车送我去重庆。学校一个学期一两万的学费,父母预支薪水供我读书,感谢他们的付出。

感谢机械工业出版社的吴怡编辑,如果没有她的鼓励和指导,也不会有这本书的面世,真心感谢她。

感谢吴瀚清(网名:刺、道哥、大风),在安全宝的时间里,刺总给了我很多帮助,不管是工作上还是个人成长上都给予引导和包容,他是一位真正的好老板。

感谢safekey team的兄弟们,他们是晴天小铸、tenzy、x0h4ck3r、zvall、yy520以及cond0r,本书里面有多个影响非常大的0day出自他们之手,我们因为喜欢代码审计而聚集在一起。

感谢曾经陪我熬了无数个通宵的好哥们Snow、小软,我们曾经一起渗透,一起研究,一起写代码,无不分享。

感谢工作中同我一起奋斗的同事们,没有他们的辛苦战斗就没有今天我们攻城拔寨的辉煌战绩,他们包括但不限于:翁国军、李翼、全龙飞、曾欢。

感谢喜付宝的林能(ID:矢志成谜)对本书提出的建设性建议。尹毅微信:seayace邮箱:root@cnseay.com博客:www.cnseay.com微博:http://weibo.com/seayace第一部分 代码审计前的准备漏洞的利用依赖PHP版本、Web中间件版本与类型、操作系统类型和版本以及这些软件的配置等多因素,所以我们在代码审计前需要做不少的准备工作,最重要的是环境搭建和代码审计辅助工具的使用,这一部分将从代码审计环境的搭建和这些工具的使用来展开介绍。第1章主要介绍环境的搭建,包括wamp/wnmp环境以及lamp/lnmp环境。这些环境搭建是简单的。这里要重点理解的是PHP的核心配置,大多数情况下PHP的配置可以决定一个漏洞能否利用。在代码审计过程中,需要用到很多额外的辅助工具,比如编辑器、代码审计系统以及正则表达式工具,等等。借助这些辅助工具,可以大大提高审计效率,所以第2章中将着重介绍这些辅助工具的使用。第1章 代码审计环境搭建

在搭建PHP代码审计环境时,因为不是线上环境,为了方便配置环境,所以尽量使用最简单的搭建方法,通常代码审计师都选择安装wamp/wnmp或者lamp/lnmp等环境集成包,可以快速构建我们所需要的PHP运行环境。在选择集成包的时候必须要考虑的是集成环境版本问题,对于PHP、MySQL、Apache等服务软件版本,尽量使用目前使用最多的版本,比如PHP 5.2.X、MySQL 5.0以上,在针对特殊的漏洞测试时可能还需要安装不同的版本进行测试,还需要在不同的操作系统下测试。1.1 wamp/wnmp环境搭建

wamp组合是使用最多的测试环境,常用的集成环境包有phpStudy、WampServer、XAMPP以AppServ。其中使用最方便且功能最强大的是phpStudy,该程序包集成最新的Apache+Nginx+Lighttpd+PHP+MySQL+phpMyAdmin+Zend Optimizer+Zend Loader,一次性安装,不需要配置就可以直接使用,是非常方便、好用的PHP调试环境。并且它支持26种环境组合随意更改,截至目前,它支持Apache、Nginx、Lighttpd、IIS6/7/8中任意一种WebServer随时在PHP 5.2、PHP 5.3、PHP 5.4、PHP 5.5、PHP 5.6中切换组合使用。我们可以在phpStudy官网www.phpstudy.net直接下载phpStudy安装程序。

我们通过官网链接http://www.phpstudy.net/phpstudy/phpStudy-x64.zip下载最新版的phpStudy。安装后,双击系统桌面上phpStudy图标即可启动服务,默认是Apache+PHP 5.3。这时候访问http://localhost/即可看到phpStudy探针,如图1-1所示。图 1-1

我们可以点击界面上的“其他选项”菜单按钮,在菜单中找到“PHP版本切换”项,更改配置和切换Web服务组合,如图1-2所示。图 1-2

点开选项中的“PHP版本切换”我们看到26种环境组合可以供我们随意切换,如图1-3所示。图 1-3

当我们需要Nginx环境时,只需选中Nginx+PHP*,然后点击“应用”按钮即可。

然而,在启动Web服务时偶尔也会遇到服务启动失败的情况,最常见的是WebServer服务端口被占用以及WebServer配置文件错误。对于端口占用,解决方案有两种,第一种是更换WebServer的服务端口,在配置文件中更改监听端口号即可;第二种则是结束占用端口的进程。

如果Apache的配置文件httpd.conf出错,用命令行模式启动Apache,并带上参数,Apache会提示你配置文件哪里有错误,然后就可以针对性地解决,命令是:httpd.exe-w-n"Apache2"-k start,其中Apache2表示服务名。1.2 lamp/lnmp环境搭建

在不同的操作系统下,漏洞的测试结果也可能会不一样。简单举例,像文件包含截断,在Windows下与Linux下截断也有不一样的地方。为了更好地测试漏洞,我们还需要搭建Linux下的PHP环境。跟Windows一样,在Linux下也有PHP集成环境包,常用的有phpStudy for Linux、lanmp以及XAMPP。因为phpStudy支持Apache、Nginx、Lighttpd中任意一种WebServer在PHP 5.2、PHP 5.3、PHP 5.4、PHP 5.5中12种组合的简单切换,为了更方便测试环境调整,所以我们依旧选择phpStudy来搭建lanmp测试环境,phpStudy支持CentOS、Ubuntu、Debian等Linux系统。

我们通过官网http://lamp.phpstudy.net/下载最新版的phpStudy到虚拟机并进行安装。安装过程很简单,如果你选择的是下载版,只需要执行如下命令:

按提示安装自己所需要的环境组合,如图1-4所示。图 1-4

访问http://localhost(如图1-5所示),说明安装成功。图 1-5

假如你先安装了Apache+PHP 5.3,想切换成Nginx+PHP 5.4,只需再运行一次./phpstudy.bin,你会发现有一行是否安装MySQL提示,选择“不安装”,这样只需要编译Nginx+PHP 5.4,从而节省时间,这样只需要几分钟即可。1.3 PHP核心配置详解

代码在不同环境下执行的结果也会大有不同,可能就因为一个配置问题,导致一个非常高危的漏洞能够利用;也可能你已经找到的一个漏洞就因为你的配置问题,导致你鼓捣很久都无法构造成功的漏洞利用代码。然而,在不同的PHP版本中配置指令也有不一样的地方,新的版本可能会增加或者删除部分指令,改变指令默认设置或者固定设置指令,因此我们在代码审计之前必须要非常熟悉PHP各个版本中配置文件的核心指令,才能更高效地挖掘到高质量的漏洞。

我们在阅读PHP官方配置说明(http://www.php.net/manual/zh/ini.list.php)之前需要了解几个定义值,即PHP_INI_*常量的定义,参见表1-1。表1-1 PHP_INI_*常量的定义

PHP配置文件指令多达数百项,为了节省篇幅,这里不一一对每个指令进行说明,只列出会影响PHP脚本安全的配置列表以及核心配置选项。

1.register_globals(全局变量注册开关)

该选项在设置为on的情况下,会直接把用户GET、POST等方式提交上来的参数注册成全局变量并初始化值为参数对应的值,使得提交参数可以直接在脚本中使用。register_globals在PHP版本小于等于4.2.3时设置为PHP_INI_ALL,从PHP 5.3.0起被废弃,不推荐使用,在PHP 5.4.0中移除了该选项。

当register_globals设置为on且PHP版本低于5.4.0时,如下代码输出结果为true。

测试代码:

执行结果如图1-6所示。图 1-6

2.allow_url_include(是否允许包含远程文件)

这个配置指令对PHP安全的影响不可小觑。在该配置为on的情况下,它可以直接包含远程文件,当存在include($var)且$var可控的情况下,可以直接控制$var变量来执行PHP代码。allow_url_include在PHP 5.2.0后默认设置为off,配置范围是PHP_INI_ALL。与之类似的配置有allow_url_fopen,配置是否允许打开远程文件,不过该参数对安全的影响没有allow_url_include大,故这里不详细介绍。

配置allow_url_include为on,可以直接包含远程文件。测试代码如下:

测试截图如图1-7所示。

3.magic_quotes_gpc(魔术引号自动过滤)

magic_quotes_gpc在安全方面做了很大的贡献,只要它被开启,在不存在编码或者其他特殊绕过的情况下,可以使得很多漏洞无法被利用,它也是让渗透测试人员很头疼的一个东西。当该选项设置为on时,会自动在GET、POST、COOKIE变量中的单引号(')、双引号(")、反斜杠(\)及空字符(NULL)的前面加上反斜杠(\),但是在PHP 5中magic_quotes_gpc并不会过滤$_SERVER变量,导致很多类似client-ip、referer一类的漏洞能够利用。在PHP 5.3之后的不推荐使用magic_quotes_gpc,PHP 5.4之后干脆被取消,所以你下载PHP 5.4之后的版本并打开配置文件会发现找不到这个配置选项。在PHP版本小于4.2.3时,配置范围是PHP_INI_ALL;在PHP版本大于4.2.3时,是PHP_INI_PERDIR。图 1-7

测试代码如下:

测试结果如图1-8所示。图 1-8

4.magic_quotes_runtime(魔术引号自动过滤)

magic_quotes_runtime也是自动在单引号(')、双引号(")、反斜杠(\)及空字符(NULL)的前面加上反斜杠(\)。它跟magic_quotes_gpc的区别是,处理的对象不一样,magic_quotes_runtime只对从数据库或者文件中获取的数据进行过滤,它的作用也非常大,因为很多程序员只对外部输入的数据进行过滤,却没有想过从数据库获取的数据同样也会有特殊字符存在,所以攻击者的做法是先将攻击代码写入数据库,在程序读取、使用到被污染的数据后即可触发攻击。同样,magic_quotes_runtime在PHP 5.4之后也被取消,配置范围是PHP_INI_ALL。

有一个点要记住,只有部分函数受它的影响,所以在某些情况下这个配置是可以绕过的,受影响的列表包括get_meta_tags()、file_get_contents()、file()、fgets()、fwrite()、fread()、fputcsv()、stream_socket_recvfrom()、exec()、system()、passthru()、stream_get_contents()、bzread()、gzfile()、gzgets()、gzwrite()、gzread()、exif_read_data()、dba_insert()、dba_replace()、dba_fetch()、ibase_fetch_row()、ibase_fetch_assoc()、ibase_fetch_object()、mssql_fetch_row()、mssql_fetch_object()、mssql_fetch_array()、mssql_fetch_assoc()、mysqli_fetch_row()、mysqli_fetch_array()、mysqli_fetch_assoc()、mysqli_fetch_object()、pg_fetch_row()、pg_fetch_assoc()、pg_fetch_array()、pg_fetch_object()、pg_fetch_all()、pg_select()、sybase_fetch_object()、sybase_fetch_array()、sybase_fetch_assoc()、SplFileObject::fgets()、SplFileObject::fgetcsv()、SplFileObject::fwrite()。

测试代码如下:

测试结果如图1-9所示。

5.magic_quotes_sybase(魔术引号自动过滤)

magic_quotes_sybase指令用于自动过滤特殊字符,当设置为on时,它会覆盖掉magic_quotes_gpc=on的配置,也就是说,即使配置了gpc=on也是没有效果的。这个指令与gpc的共同点是处理的对象一致,即都对GET、POST、Cookie进行处理。而它们之前的区别在于处理方式不一样,magic_quotes_sybase仅仅是转义了空字符和把单引号(')变成了双引号('')。与gpc相比,这个指令使用得更少,它的配置范围是PHP_INI_ALL,在PHP 5.4.0中移除了该选项。图 1-9

测试代码如下:

执行结果如图1-10所示。图 1-10

6.safe_mode(安全模式)

安全模式是PHP内嵌的一种安全机制,当safe_mode=on时,联动可以配置的指令有safe_mode_include_dir、safe_mode_exec_dir、safe_mode_allowed_env_vars、safe_mode_protected_env_vars。safe_mode指令的配置范围为PHP_INI_SYSTEM,PHP 5.4之后被取消。

这个配置会出现下面限制:

1)所有文件操作函数(例如unlink()、file()和include())等都会受到限制。例如,文件a.php和文件c.txt的文件所有者是用户a,文件b.txt的所有者是用户b并且与文件a.php不在属于同一个用户的文件夹中,当启用了安全模式时,使用a用户执行a.php,删除文件c.txt可成功删除,但是删除文件b.php会失败。对文件操作的include等函数也一样,如果有一些脚本文件放在非Web服务启动用户所有的目录下,需要利用include等函数来加载一些类或函数,可以使用safe_mode_include_dir指令来配置可以包含的路径。

2)通过函数popen()、system()以及exec()等函数执行命令或程序会提示错误。如果我们需要使用一些外部脚本,可以把它们集中放在一个目录下,然后使用safe_mode_exec_dir指令指向脚本的目录。

下面是启用safe_mode指令时受影响的函数、变量及配置指令的完整列表:

apache_request_headers()、ackticks()、hdir()、hgrp()、chmode()、chown()、copy()、dbase_open()、dbmopen()、dl()、exec()、filepro()、filepro_retrieve()、ilepro_rowcount()、fopen()、header()、highlight_file()、ifx_*、ingres_*、link()、mail()、max_execution_time()、mkdir()、move_uploaded_file()、mysql_*、parse_ini_file()、passthru()、pg_lo_import()、popen()、posix_mkfifo()、putenv()、rename()、zmdir()、set_time_limit()、shell_exec()、show_source()、symlink()、system()、touch()。

安全模式下执行命令失败的提示,如图1-11所示。图 1-11

7.open_basedir PHP可访问目录

open_basedir指令用来限制PHP只能访问哪些目录,通常我们只需要设置Web文件目录即可,如果需要加载外部脚本,也需要把脚本所在目录路径加入到open_basedir指令中,多个目录以分号(;)分割。使用open_basedir需要注意的一点是,指定的限制实际上是前缀,而不是目录名。例如,如果配置open_basedir=/www/a,那么目录/www/a和/www/ab都是可以访问的。所以如果要将访问仅限制在指定的目录内,请用斜线结束路径名。例如设置成:open_basedir=/www/a/。

当open_basedir配置目录后,执行脚本访问其他文件都需要验证文件路径,因此在执行效率上面也会有一定的影响。该指令的配置范围在PHP版本小于5.2.3时是PHP_INI_SYSTEM,在PHP版本大于等于5.2.3是PHP_INI_ALL。

8.disable_functions(禁用函数)

在正式的生产环境中,为了更安全地运行PHP,也可以使用disable_functions指令来禁止一些敏感函数的使用。当你想用本指令禁止一些危险函数时,切记要把dl()函数也加到禁止列表,因为攻击者可以利用dl()函数来加载自定义的PHP扩展以突破disable_functions指令的限制。

本指令配置范围为php.ini only。配置禁用函数时使用逗号分割函数名,例如:disable_functions=phpinfo,eval,passthru,exec,system。

9.display_errors和error_reporting错误显示

display_errors表明是否显示PHP脚本内部错误的选项,在调试PHP的时候,通常都把PHP错误显示打开,但是在生产环境中,建议关闭PHP错误回显,即设置display_errors=off,以避免带来一些安全隐患。在设置display_errors=on时,还可以配置的一个指令是error_reporting,这个选项用来配置错误显示的级别,可使用数字也可使用内置常量配置,数字格式与常量格式的详细信息如表1-2所示。表1-2 数字格式与常量格式

这两个指令的配置范围都是PHP_INI_ALL。

会影响到安全的指令大致就介绍到这里,表1-3列出一些常用指令以及对应的说明。表1-3 常用指令及说明第2章 审计辅助与漏洞验证工具

在代码审计和开发中,我们都需要一些代码编辑器来编辑代码,或者调试代码,也需要一些工具来验证漏洞是否存在。而各个编辑器也有所差异,所谓宝刀配英雄,使用一款好的编辑器能帮助你所向披靡,更简单轻松地写代码。而对于审计师来说;代码审计软件也是如此,一款好的代码审计工具可以使审计师在短时间内快速发现代码问题。本章将详细介绍几款常用的代码编辑器和代码审计软件以及一些常用的漏洞验证辅助工具。2.1 代码编辑器

不管是做开发还是代码审计,一款顺手的代码编辑器必不可少,代码编辑器从轻量级到功能复杂强大的完备型,从免费到商业,都有很多款供我们选择,我们可以根据需要选择最适合的一款,常用的轻量级代码编辑器有Nodepad++、Editplus、UltraEdit、PSPad、Vim、Gedit,等等,这些都是都是通用型文本编辑器,支持多种编程语言代码高亮,优点是操作简单,启动快并且对文本操作很方便。常用的完备型PHP开发软件也不少,这类编辑器主要的优点是功能全,对代码调试、代码提示等都支持得比较好,使我们在开发的时候bug更少,开发效率更高,常用的有Zend Studio、PhpStorm、PhpDesigner以及NetBeans等。

如果你用编辑器来做开发,并且代码量比较大,建议你使用Zend Studio。如果用来做代码审计或者少量代码的开发,建议使用Nodepad++这类轻量级文本编辑器。2.1.1 Notepad++

Notepad++是一套非常有特色的开源纯文字编辑器(许可证:GPL),运行于Windows系统,有完整的中文接口及支持多国语言撰写的功能(UTF8技术)。它的功能比Windows中的Notepad(记事本)强大,除了可以用来编辑一般的纯文字文件之外,也十分适合轻量开发的编辑器。Notepad++不仅有语法高亮显示功能,也有语法折叠功能,并且支持宏以及扩充基本功能的外挂模组。

Notepad++可以安装免费使用。支持如下语言的代码高亮显示:C、C++、Java、C#、XML、HTML、PHP、ASP、AutoIt、DOS批处理、CSS、ActionScript、Fortran、Gui4Cli、Haskell、JSP、Lisp、Lua、Matlab、NSIS、Objective-C、Pascal、Python、JavaScript等。

Notepad++拥有非常多强大的功能,特别是对文本操作非常灵活,这是笔者用得最多的一个文本编辑器,经常用来做一些有特定格式的文本批量替换、搜索、去重,等等。当然,它的强大不止如此。下面简单介绍下它的核心功能:

1)内置支持多达27种语法高亮显示(包括各种常见的源代码、脚本,能够很好地支持.nfo文件查看),还支持自定义语言。

2)可自动检测文件类型,根据关键字显示节点,节点可自由折叠/展开,还可显示缩进引导线,代码显示得很有层次感。

3)可打开双窗口,在分窗口中又可打开多个子窗口,显示比例。

4)提供了一些有用工具,如邻行互换位置、宏功能等。

5)可显示选中的文本的字节数(而不是一般编辑器所显示的字数,这在某些情况下很方便,比如软件本地化)。

6)正则匹配字符串及批量替换,也支持批量文件操作。

7)强大的插件机制,扩展了编辑能力,如Zen Coding。

我们可以在官网Notepad++官网(notepad-plus-plus.org)下载最新版。主界面如图2-1所示。2.1.2 UltraEdit

UltraEdit(官网www.ultraedit.com)是一款功能强大的文本编辑器,不过它不是开源软件,官网售价79.95美元,可以完美运行在Windows、Linux以及Mac系统上。

这款编辑器不仅可以编辑文本,还支持十六进制查看以及编辑。可以直接在上面修改exe等文件,如图2-2所示。图 2-1图 2-2

该编辑器支持将近二十种编程语言的语法高亮显示,可同时编辑多个文件,支持打开超过4GB以上的文件,支持多种编码转换、排序去重。通过配置使用的脚本运行程序路径,比如php.exe的路径,就可以在使用UltraEdit编辑PHP代码的时候直接执行代码。再结合它的代码补全功能,它也算得上一款不错的代码编辑器。要实现这个功能,首先在“高级→工具栏配置”中配置一些执行环境参数,在“命令行”的位置填入你的PHP文件路径,在“菜单项目名称”上写你想填的菜单栏名称,这里写的是php.exe,在“工作目录”中写上你的PHP exe路径,然后点击“确定”按钮,即可新建一个文件。在“高级”菜单里面点一下添加的php.exe(菜单栏名称)即可执行代码,如图2-3所示。图 2-3

另外一个比较好的功能是文件对比。这个功能也是经常会用到的,特别是我们在分析开源程序发布的官方补丁时,比如Phpcms某天发布了一个代码执行漏洞修补补丁,那么我们就可以在官网下载补丁文件,然后利用UltraEdit的文件对比功能来快速找到修改了哪段代码,修改的部分是不是成功修补了这个漏洞,或者未公开的漏洞。也可以根据这个方法快速找到漏洞在哪里。

这个功能可以在菜单栏“文件→比较文件”中找到,然后选择要对比的两个以上文件,勾选“比较选项”里面以忽略开头的所有选项,点击“比较”按钮即可,如图2-4所示。

如果比较的文件有不同的地方,它会用红色标出,如图2-5所示。

UltraEdit被公认为程序员必备的编辑器,是能够满足你一切编辑需要的编辑器。图 2-4图 2-52.1.3 Zend Studio

Zend Studio与PHP出自同一家公司,也可以说Zend Studio是PHP官方专门开发出来用来编写PHP代码的代码编辑器。Zend Studio是目前用户量最大的PHP开发工具,也是屡获大奖的专业PHP集成开发环境,具备功能强大的专业编辑工具和调试工具,支持PHP语法高亮显示,支持语法自动填充功能,支持书签功能,支持语法自动缩排和代码复制功能,内置一个强大的PHP代码调试工具,支持本地和远程两种调试模式,支持多种高级调试功能,可以完美运行在目前主流的Windows、Linux以及Mac操作系统上。官网是http://www.zend.com/en/products/studio。

Zend Studio 10.6版本的界面截图如图2-6所示。图 2-6

Zend Studio最令笔者最喜欢的功能是代码提示功能,实际上,只要这个功能做得好的编辑器,笔者都非常喜欢,因为这非常人性化,可以让我们不用去记那么多函数,等你经常用的编程语言超过了6种以上,你就会深有感触。代码提示功能如图2-7所示。图 2-7

另外Zend Studio在代码调试方面也非常强大,支持多种调试模式,利用它的调试功能,可以让我们非常快地发现bug位置,监控数据传递过程和函数运行情况,如图2-8所示。图 2-82.2 代码审计工具

代码审计工具是一类辅助我们做白盒测试的程序,它可以分很多类,例如安全性审计以及代码规范性审计,等等。当然,也可以按它能审计的编程语言分类,目前商业性的审计软件大多支持多种编程语言,也有个人或团队开发的免费开源审计软件,像笔者的“Seay源代码审计系统”就是开源程序。使用一款好的代码审计软件可以极大地降低审计成本,可以帮助审计师快速发现问题所在,同时也能降低审计门槛,但也不能过分依赖审计软件。目前常用的代码安全审计软件还有Fortify SCA、RIPS、FindBugs、Codescan等。下面介绍几款常用代码安全审计工具。2.2.1 Seay源代码审计系统

这是笔者基于C#语言开发的一款针对PHP代码安全性审计的系统,主要运行于Windows系统上。这款软件能够发现SQL注入、代码执行、命令执行、文件包含、文件上传、绕过转义防护、拒绝服务、XSS跨站、信息泄露、任意URL跳转等漏洞,基本上覆盖常见PHP漏洞。另外,在功能上,它支持一键审计、代码调试、函数定位、插件扩展、自定义规则配置、代码高亮、编码调试转换、数据库执行监控等数十项强大功能。主界面如图2-9所示。图 2-9

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载