armourinfosec/Secure-PHP-Development
GitHub: armourinfosec/Secure-PHP-Development
一套基于 PHP 8.2/8.3 的安全 PHP 开发实战课程,通过 31 个模块和 20 个先利用后修复的实验,系统教授现代 PHP 开发与 OWASP 漏洞攻防技能。
Stars: 0 | Forks: 0
# 安全 PHP 开发
**课程主页:** Armour Infosec Vault
## 课程信息
| 属性 | 值 |
|----------|-------|
| **课程标题** | 安全 PHP 开发 |
| **文件夹** | `Secure-PHP-Development/` |
| **标签** | 安全 PHP 开发 |
| **Slug** | `php-sec` |
| **级别** | 初级到中级 |
| **时长** | 1 个月(4 周 · 每天 1 小时 · 约 30 小时) |
| **重点** | 安全应用开发 |
| **参考 Runtime** | PHP 8.2 · PHP 8.3 |
| **模块** | 31 |
| **交付方式** | 自主学习笔记 + 动手实践实验 |
| **语言** | 英文 |
## 课程描述
全面掌握端到端的安全 PHP 开发:语言本身和现代 PHP 8.2/8.3,Web 请求层(superglobals、表单、验证、headers、文件处理),面向对象编程和通过 PDO 访问 MySQL,专业工具(Composer、PSR 标准、架构、测试、静态分析),以及涵盖 OWASP Top 10 和 PHP 特定漏洞的完整应用安全体系——包括身份验证、加密和 REST API。
本课程通过从防御**和**攻击角度编写的广泛、可重现的动手实验进行授课,因此每一类漏洞都配有可用的 exploit 以及修复它的安全、规范的 PHP 代码。
## 概述
**安全 PHP 开发**课程提供了涵盖现代 PHP、应用架构、数据库访问和 Web 应用安全的实用且面向实战的技能。它只需要具备基本的编程基础,然后逐步发展到利用和修复真实的漏洞。
在本课程结束时,学生将能够:
- 使用 `declare(strict_types=1)` 和 PSR-12 风格编写整洁、现代的 PHP 8.2/8.3 代码
- 安全地处理 Web 输入——superglobals、表单、验证和文件上传
- **完全通过 PDO prepared statements** 进行数据建模和查询 MySQL
- 使用 OOP、SOLID 和常见的设计模式构建应用结构
- 使用 Composer 管理依赖,并通过测试和静态分析保证质量
- 在实验室中识别并利用 OWASP Top 10 和 PHP 特定漏洞
- 使用安全、规范的 PHP 代码修复每一类漏洞
- 构建安全的身份验证——password hashing、sessions、MFA 和 RBAC
- 正确应用密码学(libsodium)(hashing、encryption、key management)
- 使用 JWT、版本控制和 rate limiting 设计并保护 REST API
- 在 PHP-FPM 和反向代理后端对 PHP 进行性能分析、调优并部署强化
- 通过 CI/CD 实现测试、security gates 和部署的自动化
## 学习路径
这 31 个模块被编排为八个渐进的阶段。在进入下一阶段之前,请先完成当前阶段;后续的安全和运维模块需要用到早期阶段的基础知识。
```
Stage 1 Fundamentals ......... Introduction · Dev Environment · First Steps · Data Types
Stage 2 Logic & Functions .... Control Structures · Functions & Scope
Stage 3 The Web Layer ........ Superglobals · Forms & Validation · Regex · Dynamic Pages
Headers · Encode/Decode · File Handling · Debugging
Stage 4 OOP & Databases ...... OOP · MySQL · PHP + MySQL (PDO)
Stage 5 Secure Baseline ...... Secure PHP Development Practices
Stage 6 Professional PHP ..... Modern PHP · Composer · PSR · Architecture · Testing · Static Analysis
Stage 7 Application Security . Security (OWASP) · Authentication · Cryptography · REST APIs
Stage 8 Operations ........... Performance · Deployment · CI/CD
```
```
flowchart LR
A[Fundamentals] --> B[Logic & Functions]
B --> C[The Web Layer]
C --> D[OOP & Databases]
D --> E[Secure Baseline]
E --> F[Professional PHP]
F --> G[Application Security]
G --> H[Performance · Deployment · CI/CD]
```
## 前置要求
| 要求 | 级别 | 备注 |
|-------------|-------|-------|
| 基本编程概念 | 推荐 | 任何语言的变量、循环、函数 |
| HTML & HTTP 基础 | 推荐 | Requests、responses、表单——将在课程中巩固 |
| 命令行基础 | 推荐 | 从终端运行 `php` 和 `composer` |
| 之前的 PHP 经验 | 非必需 | 课程从语言基础开始讲授 |
| 本地计算机 (Linux/macOS/Windows) | 必需 | 用于安装 PHP 8.2/8.3 和 MySQL/MariaDB |
## 软件要求
| 组件 | 推荐 | 用途 |
|-----------|-------------|---------|
| **PHP runtime** | PHP 8.2 或 8.3 (CLI + FPM) | 所有示例的语言 runtime |
| **数据库** | MySQL 8 *或* MariaDB 10.6+ | PDO 示例、schema 设计、CRUD 实验 |
| **Dependency manager** | Composer 2.x | Autoloading (PSR-4)、packages、工具 |
| **Web 服务器** | PHP 内置服务器 (`php -S`),或 Nginx/Apache | 在本地和部署实验中提供应用服务 |
| **编辑器** | VS Code / PhpStorm + Xdebug | 编辑和 step-debugging |
| **浏览器 + HTTP client** | 任何现代浏览器 · curl / Postman | 测试动态页面和 REST API |
| **可选** | Docker / Docker Compose | 可重现、一次性的实验环境 |
## 开发环境
本课程的“实验室”是本地安装的 PHP + MySQL(或一个 container)。后续模块将添加反向代理、PHP-FPM 和 CI 工具。
```
# 检查现有的 PHP 安装
php -v
# Debian / Ubuntu / Kali — PHP 8.3 + MySQL client + 常用扩展
sudo apt update
sudo apt install -y php php-cli php-mysql php-mbstring php-xml php-curl mariadb-server
# Composer(依赖管理器)
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
```
```
# 使用 PHP 内置开发服务器运行项目
php -S localhost:8000 -t public/
# 或者在一次性容器中运行所有内容
docker compose up -d
```
## 课程模块
**31 个教学模块**分为八个渐进的阶段,每个模块都链接到各自的 `Readme` 中心——外加下方的 [实验](Labs/Readme.md)、[迷你项目](Mini-Projects/Readme.md) 和 [抽认卡](Flashcards/Readme.md) 集合,**总共 34 个文件夹**。
### 阶段 1 · 基础
| # | 模块 | 重点 |
|---|--------|-------|
| 1 | [PHP 简介](Introduction-to-PHP/Readme.md) | PHP 是什么、它的历史、request lifecycle、PHP 在技术栈中的运行位置 |
| 2 | [开发环境配置](Development-Environment/Readme.md) | 安装 PHP 8.2/8.3、Web 服务器和 Composer;编辑器和 debugging 配置 |
| 3 | [PHP 初步](First-Steps-in-PHP/Readme.md) | 语法、`echo`/`print`、运行脚本、在 HTML 中嵌入 PHP |
| 4 | [变量与数据类型](PHP-Data-Types/Readme.md) | 标量、数组、type juggling、`strict_types`、类型转换 |
### 阶段 2 · 逻辑与函数
| # | 模块 | 重点 |
|---|--------|-------|
| 5 | [控制结构与循环](Control-Structures/Readme.md) | 条件语句、循环、`match`、control-flow 模式 |
| 6 | [用户自定义函数与作用域](Functions-and-Scope/Readme.md) | 参数、返回类型、变量作用域、闭包、arrow functions |
### 阶段 3 · Web 层
| # | 模块 | 重点 |
|---|--------|-------|
| 7 | [Superglobals、Sessions 与表单](Super-Global-Variable/Readme.md) | `$_GET`/`$_POST`/`$_SESSION`/`$_SERVER`、request data、session 处理 |
| 8 | [表单处理与验证](Form-Validation/Readme.md) | 使用 `filter_var` 验证和清理输入、错误处理 |
| 9 | [正则表达式](Regular-Expressions/Readme.md) | PCRE、`preg_*`、用于验证和提取的模式 |
| 10 | [构建动态 Web 页面](Building-Dynamic-Web-Pages/Readme.md) | 模板、安全地混合 PHP 和 HTML、转义输出 |
| 11 | [HTTP Headers 与安全 Headers](Headers/Readme.md) | Headers、重定向、内容类型、CSP/HSTS 等 |
| 12 | [编码、解码与 Hashing](Encode-and-Decode/Readme.md) | Base64/URL/JSON、`htmlspecialchars`、序列化、hashing 基础 |
| 13 | [文件与目录处理](File-Handling/Readme.md) | 读写文件、上传、streams、path-traversal 防护 |
| 14 | [Debugging 与错误处理](Debugging-and-Error-Handling/Readme.md) | Errors 与 exceptions、`try`/`catch`、日志记录、错误报告 |
### 阶段 4 · OOP 与数据库
| # | 模块 | 重点 |
|---|--------|-------|
| 15 | [PHP 面向对象编程](Object-Oriented-Programming-in-PHP/Readme.md) | 类、接口、traits、命名空间、可见性 |
| 16 | [MySQL 基础](Mysql/Readme.md) | 关系建模、SQL、schema 设计、索引 |
| 17 | [PHP 与 MySQL 集成 (CRUD)](Using-PHP-to-Access-MySQL/Readme.md) | PDO、prepared statements、transactions、migrations |
### 阶段 5 · 安全基线
| # | 模块 | 重点 |
|---|--------|-------|
| 18 | [安全 PHP 开发实践](Secure-PHP-Development-Practices/Readme.md) | 安全基线:输入验证、输出转义、最小权限、密钥 |
### 阶段 6 · 专业 PHP
| # | 模块 | 重点 |
|---|--------|-------|
| 19 | [现代 PHP](Modern-PHP/Readme.md) | PHP 8.2/8.3:enums、`readonly`、fibers、attributes、named args、`match` |
| 20 | [Composer](Composer/Readme.md) | 依赖管理、PSR-4 autoloading、语义化版本控制 |
| 21 | [PSR 标准](PSR-Standards/Readme.md) | PSR-1/4/7/12/15、编码标准、互操作性 |
| 22 | [架构与设计模式](Architecture/Readme.md) | SOLID、MVC、分层、依赖注入、常见设计模式 |
| 23 | [测试](Testing/Readme.md) | PHPUnit、unit/integration 测试、TDD、mocking、覆盖率 |
| 24 | [静态分析](Static-Analysis/Readme.md) | PHPStan/Psalm、类型覆盖、CI 集成 |
### 阶段 7 · 应用安全
| # | 模块 | 重点 |
|---|--------|-------|
| 25 | [安全——PHP 漏洞深度解析](Security/Readme.md) | OWASP Top 10 + PHP 特定漏洞:SQLi、XSS、CSRF、object injection、SSRF、XXE、SSTI、… |
| 26 | [身份验证与授权](Authentication/Readme.md) | Sessions、`password_hash`、login 流程、MFA、RBAC |
| 27 | [密码学](Cryptography/Readme.md) | Hashing、对称/非对称加密、libsodium、key management |
| 28 | [REST API](REST-API/Readme.md) | REST 设计、JSON、JWT、版本控制、rate limiting、API 安全 |
### 阶段 8 · 运维
| # | 模块 | 重点 |
|---|--------|-------|
| 29 | [性能](Performance/Readme.md) | OPcache、性能分析、缓存策略、查询优化 |
| 30 | [部署](Deployment/Readme.md) | PHP-FPM、Nginx/Apache、环境配置、生产环境强化 |
| 31 | [CI/CD](CI-CD/Readme.md) | Pipelines、自动化测试、security gates、部署自动化 |
## 动手实验
**20 个先利用后修复的实验**——每个都是独立的(目标 → 前置条件 → 演示 → 练习 → 挑战 → 解决方案 → 安全讨论)。从 [实验](Labs/Readme.md) 索引开始。
| # | 实验 | 主要模块 |
|---|-----|----------------|
| 01 | [SQL 注入](Labs/Lab-SQL-Injection.md) | 安全 |
| 02 | [反射型与存储型 XSS](Labs/Lab-Reflected-and-Stored-XSS.md) | 安全 |
| 03 | [CSRF 攻击与防御](Labs/Lab-CSRF-Attack-and-Defense.md) | 安全 |
| 04 | [命令注入](Labs/Lab-Command-Injection.md) | 安全 |
| 05 | [从 LFI 到 RCE](Labs/Lab-LFI-to-RCE.md) | 安全 |
| 06 | [PHP 对象注入](Labs/Lab-PHP-Object-Injection.md) | 安全 |
| 07 | [不安全的反序列化](Labs/Lab-Insecure-Deserialization.md) | 安全 |
| 08 | [文件上传安全](Labs/Lab-File-Upload-Security.md) | 文件与目录处理 |
| 09 | [安全登录系统](Labs/Lab-Secure-Login-System.md) | 身份验证 |
| 10 | [密码重置流程](Labs/Lab-Password-Reset-Flow.md) | 身份验证 |
| 11 | [RBAC 授权](Labs/Lab-RBAC-Authorization.md) | 身份验证 |
| 12 | [JWT 身份验证](Labs/Lab-JWT-Authentication.md) | REST API |
| 13 | [构建 REST API](Labs/Lab-Building-a-REST-API.md) | REST API |
| 14 | [Rate Limiting](Labs/Lab-Rate-Limiting.md) | REST API |
| 15 | [PDO Transactions](Labs/Lab-PDO-Transactions.md) | PHP 与 MySQL 集成 |
| 16 | [使用 Libsodium 加密数据](Labs/Lab-Encrypting-Data-with-Libsodium.md) | 密码学 |
| 17 | [使用 PHPStan 进行静态分析](Labs/Lab-Static-Analysis-with-PHPStan.md) | 静态分析 |
| 18 | [带有 Security Gates 的 CI Pipeline](Labs/Lab-CI-Pipeline-with-Security-Gates.md) | CI/CD |
| 19 | [Docker 化 PHP 应用](Labs/Lab-Dockerizing-a-PHP-App.md) | 部署 |
| 20 | [性能分析与 OPcache 调优](Labs/Lab-Profiling-and-Opcache-Tuning.md) | 性能 |
## 迷你项目**16 个安全的迷你项目和毕业项目**——每个都是一个独立的构建,将多个模块结合成一个可运行的、经过强化的应用程序。从 [迷你项目](Mini-Projects/Readme.md) 索引开始。
| # | 项目 | 整合内容 |
|---|---------|------------|
| 01 | [联系表单](Mini-Projects/Contact-Form.md) | 表单验证、CSRF、邮件 |
| 02 | [用户管理 CRUD](Mini-Projects/User-Management-CRUD.md) | PDO、OOP、验证 |
| 03 | [登录系统](Mini-Projects/Login-System.md) | Sessions、`password_hash`、CSRF |
| 04 | [身份验证系统](Mini-Projects/Authentication-System.md) | 身份验证、MFA、RBAC、sessions |
| 05 | [博客系统](Mini-Projects/Blog-System.md) | CRUD、身份验证、模板、输出转义 |
| 06 | [管理面板](Mini-Projects/Admin-Dashboard.md) | RBAC、CRUD、身份验证 |
| 07 | [任务管理器](Mini-Projects/Task-Manager.md) | CRUD、sessions、REST endpoints |
| 08 | [文件上传处理器](Mini-Projects/File-Upload-Handler.md) | 文件处理、上传安全 |
| 09 | [文件共享平台](Mini-Projects/File-Sharing-Platform.md) | 上传、身份验证、访问控制 |
| 10 | [库存系统](Mini-Projects/Inventory-System.md) | PDO transactions、CRUD |
| 11 | [开支跟踪器](Mini-Projects/Expense-Tracker.md) | CRUD、身份验证、报告 |
| 12 | [学生管理系统](Mini-Projects/Student-Management-System.md) | PDO、CRUD、报告 |
| 13 | [安全聊天应用](Mini-Projects/Secure-Chat-Application.md) | 身份验证、加密、sessions |
| 14 | [密码管理器](Mini-Projects/Password-Manager.md) | 密码学、libsodium、身份验证 |
| 15 | [短链接工具](Mini-Projects/URL-Shortener.md) | REST、数据库、rate limiting |
| 16 | [REST API](Mini-Projects/REST-API.md) | REST 设计、JWT、版本控制 |
## 抽认卡
**5 副间隔重复卡片**,包含 `Q::A` 格式,用于课程核心领域的考试式复习。从 [抽认卡](Flashcards/Readme.md) 索引开始。
| 卡组 | 重点 |
|------|-------|
| [安全](Flashcards/Security-Flashcards.md) | OWASP Top 10 和 PHP 特定漏洞 |
| [身份验证与密码学](Flashcards/Authentication-and-Cryptography-Flashcards.md) | Sessions、hashing、加密、key management |
| [数据库与 REST API](Flashcards/Database-and-REST-API-Flashcards.md) | PDO、SQL、REST 设计、JWT |
| [现代 PHP](Flashcards/Modern-PHP-Flashcards.md) | PHP 8.2/8.3 特性、类型、Composer、PSR |
| [架构与标准](Flashcards/Architecture-and-Standards-Flashcards.md) | SOLID、设计模式、测试、静态分析 |
## 学习成果
完成后,学生将能够:
| 领域 | 成果 |
|--------|---------|
| **现代 PHP** | 使用 OOP、SOLID 和设计模式编写强类型的、符合 PSR-12 标准的 PHP 8.2/8.3 代码 |
| **数据访问** | 完全通过 PDO prepared statements 和 transactions 查询 MySQL |
| **Web 安全** | 识别、利用并修复 OWASP Top 10 和 PHP 特定漏洞 |
| **身份验证** | 构建安全的 login、password、MFA 和 RBAC 流程 |
| **密码学** | 正确使用 libsodium 应用 hashing 和加密 |
| **API** | 使用 JWT、版本控制和 rate limiting 设计并保护 REST API |
| **质量** | 通过 PHPUnit 测试和 PHPStan 静态分析确保正确性 |
| **交付** | 在 PHP-FPM/Nginx 后面部署强化的 PHP,并通过 CI/CD 实现自动化 |
## 认证与技能对齐
本课程的内容是针对考试相关准备和以角色为中心的技能培养——不保证通过任何考试。
| 目标 | 对齐程度 | 深度覆盖 | 部分覆盖 |
|--------|-----------|------------------|-------------------|
| **OWASP Top 10 (2021) 能力** | ⭐⭐⭐⭐ 高 | 注入、失效的访问控制、加密失败、SSRF、不安全的设计 | 正式的威胁建模流程深度 |
| **安全编码 / AppSec 开发者角色** | ⭐⭐⭐⭐ 高 | 安全的 PHP 模式、漏洞修复、身份验证、API 安全 | 非 PHP 语言生态系统 |
| **Zend 认证 PHP 工程师 (ZCPE)** | ⭐⭐⭐ 中等 | OOP、数组/字符串、数据库 (PDO)、安全、Web 功能 | I/O streams 和一些 SPL/data-format 边缘主题 |
## 参考资料
- The PHP Manual —
- PHP: The Right Way —
- PHP-FIG (PSR Standards) —
- Composer Documentation —
- OWASP Top 10 —
- OWASP Cheat Sheet Series —
- Paragon Initiative (PHP security) —
- libsodium Documentation —
- PHPUnit Documentation —
- PHPStan Documentation —
## 相关课程
此 Vault 中与安全 PHP 开发完美搭配的兄弟课程:
- Linux 管理与服务器强化 —— 管理并强化这些应用运行的 Linux / Nginx / PHP-FPM 技术栈。
- 安全的 WordPress 管理 —— 将安全的 PHP 实践应用于全球受攻击最多的 PHP CMS。
- 安全专家的 Python 指南 —— PHP 之外的脚本和自动化。
另请参阅课程中心 [安全 PHP 开发](Readme.md)。
## 许可
内容采用 [知识共享署名 4.0 国际许可 (CC BY 4.0)](LICENSE) 进行许可——您可以分享和改编,但需注明出处。代码示例为教学辅助工具:每个存在漏洞的示例都进行了标记,并配有安全版本——在任何生产环境使用之前,请进行审查和强化。第三方商标归其各自所有者所有,此处引用仅供参考识别。请在隔离的本地环境中运行所有实验。
标签:OWASP Top 10, PHP开发, Web安全, XML 请求, 安全培训, 安全开发, 漏洞修复, 网络安全培训, 蓝队分析, 请求拦截