CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
PHP 进阶/课时/安全基础
RawBlame
课时目录12 节

PHP 进阶

  1. 01PHP 进阶地图
  2. 02语法与数据结构
  3. 03Web 与超全局变量
  4. 04安全基础
  5. 05OOP 深入
  6. 06现代 PHP 工程
  7. 07数据库与 ORM
  8. 08性能与运维
  9. 09测试与静态分析
  10. 10框架生态
  11. 11集成与 CLI
  12. 12综合练习

安全基础

XSS、SQL 注入、密码哈希、输入校验。

35 分钟

安全基础

Web 应用最常见的漏洞来自未过滤的输入与输出。本课覆盖 XSS、SQL 注入、密码哈希与输入校验。前置 php-essentials;路径 /roadmaps/php。

学习目标

  • 理解 XSS 与 SQL 注入的原理与防护
  • 用 password_hash 安全存储密码
  • 建立服务端输入校验习惯

XSS 防护

<?php
declare(strict_types=1);

$name = $_GET['name'] ?? 'guest';
// 错误:直接输出
// echo "<p>Hello, $name</p>";

// 正确:转义
echo '<p>Hello, ' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . '</p>';

模板引擎(Blade、Twig)默认转义;原生 PHP 须手动处理。

SQL 注入防护

// 错误:拼接 SQL
// $sql = "SELECT * FROM users WHERE email = '$email'";

// 正确:预处理语句
$stmt = $pdo->prepare('SELECT id FROM users WHERE email = :email');
$stmt->execute(['email' => $email]);
$user = $stmt->fetch();

永远用 PDO 预处理;ORM 底层同样依赖参数绑定。

密码哈希

$hash = password_hash($plainPassword, PASSWORD_ARGON2ID);

if (password_verify($inputPassword, $hash)) {
    // 登录成功
}

禁止明文或 MD5 存密码;password_verify 自动处理算法升级。

输入校验

function validateEmail(string $email): ?string {
    $email = trim($email);
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        return null;
    }
    return $email;
}

function validateSlug(string $slug): bool {
    return (bool) preg_match('/^[a-z0-9-]+$/', $slug);
}

校验在服务端做;前端校验仅为体验,不能替代。

练习

  • 写一个函数,过滤并校验 POST 中的 title(1–100 字符)
  • 用 PDO 预处理实现按 slug 查询课时
  • 注册流程:password_hash 存库,password_verify 登录

小结

输出转义、SQL 预处理、密码哈希、服务端校验——Web 安全四原则。 下一课深入 OOP。

加载本节练习…
← 上一课
Web 与超全局变量
下一课 →OOP 深入