在获得目标项目源码后,要先确认项目的开发框架;然后阅读项目的开发文档,从开发文档里能获得很多有用的信息。信息搜集目标:从传入的变量入手,比如搜索$id这个是存储了请求的具体参数,被函数接收和调用。这个参数没经过过滤,在函数中调用就跟踪这个函数有被哪些其他函数引用,或者这个不安全参数在哪些函数里被调用。
代码审计基础知识
https://blog.csdn.net/xian_wwq/article/details/133046188
PHP代码审计
项目审计首先要明确它的开发框架。
开发框架目录
以下是一些常用的PHP开发框架:
### Laravel
- **特点**
- **全栈功能丰富**:提供了路由、数据库操作、缓存、队列、任务调度、身份验证、授权、表单验证等一系列强大功能,能满足各种复杂业务需求。
- **优雅的语法**:采用现代化的PHP代码风格,语法简洁清晰,让开发者更轻松地理解和编写代码。
- **强大的社区支持**:拥有庞大且活跃的社区,开发者可以轻松找到各种开源扩展包、插件、教程、文档等资源,遇到问题能快速获得帮助。
- **遵循MVC架构**:严格遵循模型-视图-控制器架构模式,有效分离业务逻辑、数据处理和用户界面,使项目结构清晰,易于维护和扩展。
- **适用场景**:适合构建各种规模的Web应用程序,尤其是大型复杂的企业级应用、电子商务平台、社交网络应用等,也适用于对开发效率和代码质量要求较高的项目。
### Symfony
- **特点**
- **企业级框架**:专注于构建大型、可维护、高可靠性的企业级应用,提供了全面的功能集和强大的工具支持。
- **模块化设计**:采用高度模块化的架构,各个组件可以独立使用或组合使用,方便开发者根据项目需求灵活选择和定制。
- **高安全性**:内置了强大的安全机制,包括用户认证、授权、防护CSRF攻击、SQL注入攻击等,确保应用程序的安全性。
- **优秀的可扩展性**:具备良好的扩展性,允许开发者通过编写自定义的Bundle(模块)来扩展框架的功能,满足特定的业务需求。
- **适用场景**:主要用于大型企业级应用开发,如金融系统、大型电商平台、企业资源规划(ERP)系统等,这些项目对安全性、可维护性和扩展性有较高要求。
CodeIgniter
CodeIgniter是一个轻量级的PHP开发框架,以下是其主要目录结构及内容介绍:
- application
- controllers:该目录用于放置控制器类文件。控制器是MVC架构中的重要部分,负责接收用户请求、调用相应的模型方法处理数据,并将结果传递给视图进行展示。
- models:存放模型类文件。模型主要用于与数据库交互,进行数据的存储、检索和更新等操作,还可以包含一些业务逻辑处理。
- **views**:视图文件存放在此目录。视图通常是HTML模板文件,用于展示数据给用户,它可以与控制器和模型配合,将模型获取的数据以特定的格式展示出来。
- **config**:配置文件目录,包含各种配置选项,如数据库配置、路由配置、系统配置等。
- **libraries**:用户自定义的库文件存放于此。可以将一些常用的、可复用的代码封装成库,方便在项目中调用。
- **helpers**:辅助函数文件目录。辅助函数是一些独立的、用于完成特定功能的函数,如字符串处理、数组操作、日期处理等函数。
- **language**:语言包目录,用于存放不同语言的文本资源,方便实现多语言功能。
- **cache**:缓存文件目录,用于存储系统生成的缓存数据,以提高系统性能。
- **logs**:日志文件目录,记录系统的运行日志,包括错误信息、访问记录等,有助于调试和监控系统运行。
- **system**
- **core**:核心类文件目录,包含了CodeIgniter框架的核心功能类,如控制器基类、模型基类、路由类等,是框架运行的基础。
- **database**:数据库相关的类和文件,用于实现与不同数据库的连接和操作,支持多种数据库类型。
- **libraries**:框架自带的库文件目录,包含了各种功能强大的库,如表单验证库、文件上传库、邮件发送库等。
- **helpers**:框架提供的辅助函数文件,这些辅助函数可以帮助开发者更方便地完成各种常见任务。
- **language**:框架的语言文件,用于提供框架本身的多语言支持。
- **third_party**:第三方类库或插件的目录,用于集成其他开发者编写的有用的工具或库。
- **public**
- **index.php**:项目的入口文件,所有的请求都会首先经过这个文件,它负责初始化框架,加载相关配置和类,处理用户请求并返回响应。
- **assets**:通常用于存放静态资源文件,如CSS样式表、JavaScript脚本、图片、字体等。
此外,在CodeIgniter项目的根目录下,可能还会有一些其他文件和目录:
- **.htaccess**:用于配置Apache服务器的重写规则等,实现美化URL、隐藏入口文件等功能。
- **composer.json**:如果项目使用Composer进行依赖管理,该文件用于定义项目的依赖关系和相关配置。
### Yii
- **特点**
- **高性能**:采用了一系列优化措施,如缓存机制、数据库查询优化等,能有效提高应用程序的运行速度和响应性能。
- **基于组件的架构**:基于组件化的设计思想,各个功能模块都可以看作是独立的组件,方便开发者进行复用和扩展。
- **强大的功能集**:内置了安全认证、缓存管理、错误处理、数据验证、表单处理等丰富的功能,满足各种复杂业务场景的需求。
- **良好的可扩展性**:提供了丰富的扩展点和插件机制,开发者可以通过编写插件和扩展来定制和扩展框架的功能,适应不同项目的需求。
- **适用场景**:适合开发大型复杂的Web应用程序,如大型门户网站、电子商务平台、内容管理系统(CMS)等,尤其对性能和可扩展性要求较高的项目。
### Phalcon
- **特点**
- **高性能**:核心代码用C语言编写,以动态链接库的形式提供给PHP使用,避免了PHP解释器的性能瓶颈,执行速度极快,能处理高并发请求。
- **全栈框架**:提供了完整的Web开发功能,包括路由、控制器、模型、视图、数据库操作、缓存等,开发者可以在一个框架中完成整个项目的开发。
- **低资源消耗**:内存管理高效,对服务器资源的占用较少,在资源有限的环境下也能稳定运行,降低了服务器成本。
- **面向对象设计**:采用面向对象的编程思想,代码结构清晰,易于理解和维护,同时也支持多种设计模式,方便开发者编写高质量的代码。
- **适用场景**:适用于对性能要求极高、资源有限的项目,如高并发的Web应用程序、实时数据处理系统、游戏服务器等。
### CakePHP
- **特点**
- **遵循MVC模式**:严格遵循模型-视图-控制器设计模式,使代码结构清晰,易于维护和扩展。
- **快速开发**:提供了大量的工具和功能,如代码生成器、数据库迁移工具等,能帮助开发者快速搭建项目框架,减少开发时间和工作量。
- **强大的数据验证和安全性**:内置了强大的数据验证机制和安全防护功能,如表单验证、SQL注入防护、XSS防护等,确保数据的完整性和安全性。
- **活跃的社区支持**:拥有活跃的社区,开发者可以在社区中获取到丰富的资源、插件、教程等,同时也可以参与社区贡献,与其他开发者交流经验。
- **适用场景**:适合快速构建Web应用程序,尤其适用于对开发速度要求较高、业务逻辑相对简单的项目,如小型企业网站、博客系统、电子商务网站等。
### Zend Framework
- **特点**
- **成熟稳定**:经过多年的发展和完善,具有很高的稳定性和可靠性,被广泛应用于各种企业级项目中。
- **功能全面**:提供了丰富的组件和工具,涵盖了数据库操作、表单处理、身份验证、授权、缓存、日志、XML处理等各个方面,满足企业级应用的多样化需求。
- **面向对象设计**:采用面向对象的编程风格,代码结构清晰,易于维护和扩展,同时支持多种设计模式,提高了代码的可复用性和可维护性。
- **良好的兼容性**:能够与其他PHP框架和库良好地兼容,方便开发者在项目中集成其他优秀的开源组件和工具。
- **适用场景**:主要用于构建大型企业级Web应用程序和服务,如金融系统、政府项目、大型企业的内部管理系统等,对框架的稳定性、功能完整性和兼容性有较高要求的项目。
反序列化漏洞
php函数
serialize($value) | 把对象或数组序列化 ,得到字符串,以便存储 |
unserialize($str) | 把字符串反序列化,结果可得到整型,浮点型,字符型的值,数组,对象 |
__construct() | 在创建新对象前调用的方法,常 |
__destruct() | 在对象的引用被删除时或对象被销毁时调用的方法 |