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 请求, 安全培训, 安全开发, 漏洞修复, 网络安全培训, 蓝队分析, 请求拦截