news 2026/3/1 20:35:40

《零基础学 PHP:从入门到实战》·PHP Web 安全开发核心技术与攻防实战演练-威胁认知与安全开发生命周期

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
《零基础学 PHP:从入门到实战》·PHP Web 安全开发核心技术与攻防实战演练-威胁认知与安全开发生命周期

第 1 章:Web 安全基石——威胁认知与安全开发生命周期

章节介绍

欢迎开启"筑牢防线:PHP Web 安全开发核心技术与攻防实战演练"的第一章.本章将作为您 Web 安全知识体系的奠基石.在急于编写防护代码之前,我们必须首先建立正确的安全世界观:理解我们所面临的威胁是什么、攻击者为何而来、以及安全为何必须融入开发的每一个阶段.

本章学习目标:

  • 理解信息安全的基础目标(CIA 三要素).
  • 熟悉并能够复述当前最主要的 Web 应用安全威胁(OWASP Top 10).
  • 了解攻击者的常见动机与基本手段.
  • 建立"安全应融入软件开发生命周期(SDLC)"的核心开发理念.
  • 能够使用基础工具对应用进行被动扫描,识别潜在风险点.

本章在教程中的作用:
本章是整个安全开发旅程的"地图"与"指南针".它不会教授具体的防御代码,而是旨在塑造您的安全思维模式.只有先知晓战场(威胁环境)和敌人(攻击者),我们才能在后续章节中有效地构建防御工事(安全代码).本章的概念将贯穿整个教程,是所有具体防护技术的指导思想.

与前面章节的衔接:
假定您已经掌握了 PHP 基础语法、MySQL 数据库操作以及使用 PHP 构建动态网站的基本能力(如处理表单、会话管理等).我们将在此基础上,将您的视角从"实现功能"提升到"安全地实现功能".

本章主要内容概览:

  1. 核心安全概念:深入解读保密性、完整性与可用性.
  2. 威胁全景图(OWASP Top 10):系统剖析当今最危险的十大 Web 应用安全风险.
  3. 攻击者画像:了解黑客的动机、分类和常见攻击流程.
  4. 安全开发生命周期(SDLC):学习如何将安全活动整合到需求、设计、编码、测试、部署和维护的全过程中.
  5. 初探安全工具:动手使用 OWASP ZAP 进行首次安全评估,建立直观认知.

核心概念讲解

1.1 信息安全的目标:CIA 三要素

所有安全措施都围绕三个核心目标展开,它们被称为"CIA 三要素":

  • 保密性(Confidentiality):确保信息不被未授权的个人、实体或过程访问或泄露.例如,用户的密码、个人身份证号、医疗记录等敏感数据必须严格保密.
    • 违反案例:数据库配置不当导致未授权访问,从而泄露所有用户数据.
  • 完整性(Integrity):保护信息的准确性和完整性,防止被未授权的方式篡改或破坏.这包括数据完整性和系统完整性.
    • 违反案例:攻击者利用 SQL 注入修改了其他用户的账户余额.
  • 可用性(Availability):确保授权用户或系统在需要时可以可靠、及时地访问信息和使用相关资产.
    • 违反案例:攻击者通过分布式拒绝服务(DDoS)攻击使网站瘫痪,合法用户无法访问.

在 PHP 开发中的应用场景:

  • 保密性:对用户密码进行哈希存储、对敏感数据传输使用 HTTPS、实施严格的访问控制.
  • 完整性:使用预处理语句防止 SQL 注入篡改数据、对用户输入进行严格验证、为关键操作添加防篡改的数字签名或 CSRF Token.
  • 可用性:优化代码和数据库性能以抵御轻量级攻击、实施速率限制、准备 DDoS 缓解方案.

1.2 当前主要威胁:OWASP Top 10 详解

OWASP(开放 Web 应用安全项目)发布的 Top 10 是业界公认的 Web 应用最关键的安全风险清单.理解它,就如同掌握了攻击者的"热门武器库".以下我们聚焦与 PHP 开发密切相关的几项:

A01:2021-失效的访问控制
访问控制强制实施策略,使用户不能在其预期权限之外行事.失效的访问控制通常导致信息泄露、数据修改或破坏.

  • 表现形式:垂直越权(普通用户访问管理员功能)、水平越权(用户 A 访问用户 B 的数据)、权限 ID 可被预测或篡改.
  • PHP 关联:在代码中未能对每一个需要权限的请求进行校验.

A02:2021-加密机制失效
前称"敏感数据泄露".聚焦于密码学使用不当或缺失,导致敏感数据暴露.

  • 表现形式:使用弱哈希算法(如 MD5, SHA1)存储密码、在传输或存储时不加密敏感数据、使用默认或弱加密密钥.
  • PHP 关联:错误使用md5()sha1()处理密码;不启用 HTTPS.

A03:2021-注入
当不可信的数据作为命令或查询的一部分被发送给解释器时,会发生注入漏洞.

  • 主要类型:SQL 注入、NoSQL 注入、OS 命令注入、LDAP 注入.
  • PHP 关联:直接将用户输入拼接进 SQL 查询字符串是 SQL 注入的根源;将用户输入传入exec(),system()等函数可能导致命令注入.

A05:2021-安全配置缺陷
源于不安全的默认配置、临时配置、开放云存储、错误配置的 HTTP 头以及包含敏感信息的冗长错误信息.

  • PHP 关联:php.inidisplay_errors = On在生产环境泄露代码路径;Web 服务器(如 Apache/Nginx)目录列表开启;应用框架使用默认密码/密钥.

A07:2021-识别和认证失败
当应用在识别用户、认证身份、管理会话时相关功能实现有缺陷,可能导致攻击者破解密码、盗用会话令牌或利用其它实现缺陷临时或永久地冒充其他用户身份.

  • PHP 关联:弱密码策略、会话 ID 固定、会话超时设置过长、注销功能不销毁服务器端会话.

1.3 攻击者画像:他们是谁?想要什么?

理解攻击者有助于我们进行更有针对性的防御.

  • 动机:经济利益(盗取数据勒索、金融诈骗)、获取竞争优势(商业间谍)、意识形态(黑客主义)、声誉(炫耀技术)、恶意破坏.
  • 分类:
    • 脚本小子:使用现成工具进行自动化攻击,技术含量低但数量庞大.
    • 黑客活动家:出于政治或社会目的.
    • 有组织犯罪团伙:目标明确,资源充足,危害极大.
    • 内部威胁:来自组织内部的恶意员工或疏忽大意的员工.
  • 常见手段:侦察(信息收集)、扫描(寻找漏洞)、获取访问权限、维持访问、掩盖踪迹.

1.4 安全开发生命周期(SDLC/DevSecOps)

安全不应是开发结束后的一次性"贴膏药"行为,而应融入从项目启动到退役的每一个环节.这种理念被称为安全开发生命周期或 DevSecOps(开发、安全、运维一体化).

  1. 需求阶段:定义安全需求、隐私需求、合规要求.
  2. 设计阶段:进行威胁建模(Threat Modeling),识别潜在威胁并设计安全架构(如身份认证、授权、加密方案).
  3. 实现阶段:遵循安全编码规范,使用安全的 API 和库,进行同行代码安全审查.
  4. 验证阶段:进行渗透测试、漏洞扫描、动态/静态应用安全测试.
  5. 发布与响应阶段:安全部署、配置管理、建立安全监控和事件响应计划.
  6. 迭代与更新:持续监控、定期更新依赖、修复新发现漏洞.

对于 PHP 开发者的启示:在每次编写处理用户输入的代码、操作数据库、管理会话时,都应本能地思考其安全影响.

代码示例

虽然本章以概念为主,但我们将通过一些简单的代码片段,将抽象概念与具体编码实践建立初步联系.

示例 1:违反保密性 - 错误信息泄露

<?php// 不安全的做法:在生产环境显示详细错误ini_set('display_errors',1);error_reporting(E_ALL);$config=parse_ini_file('config.ini');// 假设此文件有时不存在// 如果文件不存在,将向用户暴露绝对路径信息,如:// Warning: parse_ini_file(config.ini): failed to open stream: No such file or directory in /var/www/html/vulnerable.php on line 5// 连接数据库$conn=newmysqli('localhost','db_user','db_pass','app_db');if($conn->connect_error){// 直接输出连接错误,可能泄露数据库凭证(如果错误信息中包含)die("Connection failed: ".$conn->connect_error);}?>

修复后的安全做法:

<?php// 安全做法:生产环境关闭错误显示,记录到日志ini_set('display_errors',0);ini_set('log_errors',1);ini_set('error_log','/var/log/php_errors.log');// 确保目录可写且路径不在Web根目录下error_reporting(E_ALL);try{$config=parse_ini_file('config.ini');if($config===false){thrownewException('Configuration file error.');}$conn=newmysqli('localhost','config_username','config_password','app_db');if($conn->connect_error){// 记录详细错误到日志error_log("Database connection error: ".$conn->connect_error);// 向用户展示友好的通用错误信息die("A system error has occurred. Please try again later.");}echo"Application initialized successfully (generic message).";}catch(Exception$e){error_log("Unhandled Exception: ".$e->getMessage());die("A system error has occurred.");}?>

示例 2:失效的访问控制(水平越权)概念演示

假设有一个查看个人订单的 URL:/order.php?id=123.

<?php// 存在水平越权漏洞的代码session_start();$userId=$_SESSION['user_id'];// 当前登录用户ID,假设是 100// 直接从URL参数获取要查询的订单ID$orderId=$_GET['id'];// 攻击者可随意修改,例如改为 456$pdo=newPDO('mysql:host=localhost;dbname=shop','user','pass');// 问题:查询条件只检查了订单ID,没有关联当前用户$stmt=$pdo->prepare("SELECT * FROM orders WHERE id = ?");$stmt->execute([$orderId]);$order=$stmt->fetch();if($order){echo"Order Details for ID:{$orderId}<br>";echo"Product:{$order['product_name']}<br>";// ... 显示了属于其他用户(ID 200)的订单456的详情}?>

修复方案(强制访问控制):

<?phpsession_start();$userId=$_SESSION['user_id'];$orderId=$_GET['id'];$pdo=newPDO('mysql:host=localhost;dbname=shop','user','pass');// 关键修复:在查询中同时验证订单ID和所属用户ID$stmt=$pdo->prepare("SELECT * FROM orders WHERE id = ? AND user_id = ?");$stmt->execute([$orderId,$userId]);$order=$stmt->fetch();if($order){echo"Order Details for ID:{$orderId}<br>";echo"Product:{$order['product_name']}<br>";}else{// 如果订单不存在或不属于当前用户,返回"未找到"或"拒绝访问"http_response_code(404);// 或 403echo"Order not found.";}?>

示例 3:加密机制失效 - 弱密码哈希

<?php// 非常不安全的密码存储方式$password=$_POST['password'];$weakHash=md5($password);// MD5已被证明易碰撞,且计算速度快,不适合密码存储// 或:$weakHash = sha1($password); // 同样不安全// 将 $weakHash 存入数据库...?>

安全做法(使用 PHP 内置的密码哈希 API):

<?php$password=$_POST['password'];// 创建强密码哈希$strongHash=password_hash($password,PASSWORD_DEFAULT);// PASSWORD_DEFAULT 当前是 bcrypt 算法,未来PHP版本可能会更换为更安全的算法// 哈希值包含算法、成本因子和盐,长度固定(通常60字符)// 将 $strongHash 存入数据库// ------------------ 验证密码时 ------------------$userSubmittedPassword=$_POST['login_password'];$hashFromDb='...从数据库读取的哈希值...';if(password_verify($userSubmittedPassword,$hashFromDb)){echo"Password is valid!";}else{echo"Invalid password.";}// 可选:检查哈希是否需要重新计算(如果成本因子提高了)if(password_needs_rehash($hashFromDb,PASSWORD_DEFAULT)){$newHash=password_hash($userSubmittedPassword,PASSWORD_DEFAULT);// 更新数据库中的哈希值}?>

实战项目:简易漏洞认知靶场搭建与被动扫描

项目目标:搭建一个包含故意漏洞的简易 PHP 应用,并使用 OWASP ZAP(Zed Attack Proxy)进行首次被动安全扫描,直观地"看到"漏洞报告.

步骤 1:环境准备

  1. 安装 PHP 开发环境(如 XAMPP, WAMP, 或单独安装 PHP + Apache).
  2. 下载并安装 [OWASP ZAP](https:// www.zaproxy.org/download/).

步骤 2:创建漏洞靶场应用

在您的 Web 根目录(如htdocs)下创建文件夹ch01_vuln_lab,并创建以下文件:

index.php (入口与说明)

<?phpecho"<h1>第1章 - 漏洞认知靶场</h1>";echo"<p>本应用包含一些故意设置的安全问题,仅用于学习目的.</p>";echo"<ul>";echo"<li><a href='sqli.php'>示例:潜在的SQL注入点(登录表单)</a></li>";echo"<li><a href='xss.php'>示例:潜在的XSS漏洞(留言板)</a></li>";echo"<li><a href='info.php'>示例:信息泄露(详细错误)</a></li>";echo"</ul>";?>

sqli.php (存在 SQL 注入漏洞的登录表单)

<?phpsession_start();$error='';$db=newmysqli('localhost','root','','test_db');// 请根据你的环境修改if($_SERVER['REQUEST_METHOD']=='POST'){$user=$_POST['username'];$pass=$_POST['password'];// !! 高危:直接拼接用户输入,存在SQL注入漏洞 !!$sql="SELECT * FROM users WHERE username = '$user' AND password = '$pass'";$result=$db->query($sql);if($result&&$result->num_rows>0){$_SESSION['loggedin']=true;$_SESSION['username']=$user;$error="登录成功! (这是一个演示,实际中绝不要这样写SQL)";}else{$error="用户名或密码错误.";}}?><!DOCTYPEhtml><html><head><title>漏洞登录页</title></head><body><h2>登录(存在SQL注入)</h2><?phpif($error):?><p><strong><?phpecho$error;?></strong></p><?phpendif;?><form method="post">用户名:<input type="text"name="username"><br>密码:<input type="password"name="password"><br><input type="submit"value="登录"></form><p><small>提示:尝试在用户名字段输入<code>' OR '1'='1</code></small></p></body></html>

xss.php (存在 XSS 漏洞的简单留言板)

<?php// 模拟存储留言$messages=[];if(isset($_POST['message'])){// !! 高危:存储未经过滤的用户输入 !!$messages[]=$_POST['message'];}?><!DOCTYPEhtml><html><head><title>漏洞留言板</title></head><body><h2>留言板(存在XSS)</h2><form method="post">留言:<input type="text"name="message"size="50"><input type="submit"value="提交"></form><hr><h3>留言列表:</h3><ul><?phpforeach($messagesas$msg):?><li><?phpecho$msg;// !! 高危:直接输出未转义的用户内容 !! ?></li><?phpendforeach;?></ul><p><small>提示:尝试提交<code>&lt;script&gt;alert('XSS')&lt;/script&gt;</code></small></p></body></html>

info.php (信息泄露)

<?php// 模拟一个会抛出异常的操作ini_set('display_errors',1);// 故意开启错误显示error_reporting(E_ALL);functionloadConfig($file){if(!file_exists($file)){thrownewException("配置文件$file未找到.");}returnparse_ini_file($file);}try{$config=loadConfig('missing_config.ini');}catch(Exception$e){// 直接向用户展示异常详情,泄露路径信息die('Error: '.$e->getMessage());}?>

步骤 3:配置数据库

  1. 在 MySQL 中创建数据库test_db.
  2. 创建users表并插入一条测试数据:
CREATEDATABASEtest_db;USEtest_db;CREATETABLEusers(idINTAUTO_INCREMENTPRIMARYKEY,usernameVARCHAR(50),passwordVARCHAR(50));INSERTINTOusers(username,password)VALUES('admin','password123');

步骤 4:使用 OWASP ZAP 进行被动扫描

  1. 启动 OWASP ZAP.
  2. 配置浏览器代理为 ZAP(通常为localhost:8080),或使用 ZAP 内置的浏览器.
  3. 在浏览器中访问http:// localhost/ch01_vuln_lab/index.php.
  4. 依次点击所有链接,并在sqli.php页面尝试提交表单(包括注入载荷).
  5. 观察 ZAP 的"站点"树状视图,它记录了所有访问的 URL 和请求/响应.
  6. 查看"警报"标签页.ZAP 的被动扫描器会自动分析流量,并可能标记出:
    • info.php中的详细错误信息泄露(信息泄露).
    • sqli.phpxss.php中的潜在漏洞(基于启发式规则,可能需要主动扫描才能确认).
  7. 生成一份简单的扫描报告(报告 -> 生成 HTML 报告).

项目总结:通过这个简单的靶场,您亲自体验了漏洞代码的模样,并看到了自动化安全工具如何帮助我们发现潜在问题.请记住,这个靶场的代码是绝对错误的范例,在后续章节中,我们将学习如何修正它们.

最佳实践

1. 安全思维第一

  • 默认拒绝:除非明确允许,否则一律禁止.例如,文件上传应基于扩展名白名单,而非黑名单.
  • 最小权限原则:数据库连接用户、系统进程、文件权限都应只拥有完成其任务所必需的最小权限.
  • 深度防御:不依赖单一安全措施.例如,防 SQL 注入不仅要用预处理语句,还要结合输入验证和最小权限的数据库账户.

2. PHP 安全开发的起点

  • 配置php.ini:
    • display_errors = Off(生产环境)
    • log_errors = On
    • expose_php = Off(隐藏 PHP 版本信息)
    • 限制危险函数:disable_functions = exec,system,passthru,shell_exec,proc_open,...
    • open_basedir = /path/to/your/web/app(限制 PHP 可访问的目录)
  • 保持更新:及时更新 PHP 版本、Web 服务器、数据库以及所有第三方库(如通过 Composer 安装的包),以修复已知安全漏洞.
  • 错误处理:永远不要将系统内部错误详情暴露给终端用户.使用自定义错误处理函数或异常处理,将错误记录到安全的日志文件中.

3. OWASP Top 10 防护全景预告(本章关联)

虽然具体防护代码在后续章节,但以下是针对本章提及威胁的防护思路概览:

  • A01 访问控制:对每个需要权限的控制器或 API 端点进行强制校验;使用中间件统一处理.
  • A02 加密失效:密码使用password_hash();传输层强制使用 HTTPS;敏感数据加密存储.
  • A03 注入:绝对不使用字符串拼接构造 SQL/命令.使用 PDO/MySQLi 的预处理语句.
  • A05 配置缺陷:使用安全的默认配置;定期审计服务器和应用配置;移除不必要的文件和服务.
  • A07 认证失败:实施强密码策略;使用安全的会话管理(下文详解);实现多因素认证.

练习题与挑战

基础练习题

1. 选择题:CIA 三要素
以下哪个场景主要违反了信息安全的"可用性"原则?
A. 医院病人数据库被黑客窃取并在网上公开售卖.
B. 学生篡改了教务系统中自己的成绩记录.
C. 电商网站因遭受大量虚假流量攻击而连续瘫痪 8 小时,用户无法下单.
D. 公司内网文件服务器的共享文件夹权限设置错误,导致所有员工都能访问财务部的薪资文件.

难度:★☆☆☆☆
提示:回顾 CIA 三要素的定义.
参考答案:C.网站瘫痪导致授权用户无法访问服务,是典型的可用性破坏.A 违反保密性,B 违反完整性,D 违反保密性.

2. 填空题:OWASP Top 10 识别
请根据描述填写对应的 OWASP Top 10 2021 风险类别编号(如 A01).
“攻击者通过修改 URL 中的id参数,成功查看了其他用户的私人订单详情.” 这属于__风险.
“网站使用md5()函数存储用户密码,且未加盐.” 这属于__风险.

难度:★☆☆☆☆
提示:参考本章 1.2 节.
参考答案:失效的访问控制 (A01);加密机制失效 (A02).

进阶练习题

3. 简答题:攻击者分析
假设你正在开发一个在线支付平台.请列举三种可能对该平台发起攻击的攻击者类型,并简要说明他们各自的可能动机.

难度:★★☆☆☆
提示:从经济利益、技术挑战、意识形态等角度思考.
参考答案示例:

  1. 有组织犯罪团伙:动机是直接窃取资金(拦截支付、盗刷信用卡)或窃取用户支付信息进行贩卖.
  2. 黑客活动家:动机可能是反对该支付平台或其关联公司的政策,通过瘫痪服务或篡改页面内容来制造舆论影响.
  3. 竞争对手:动机是获取商业机密(如用户增长数据、营销策略)或通过 DDoS 攻击使平台服务降级,从而抢夺用户.

4. 代码审阅
观察以下代码片段,找出其中存在的至少两处安全隐患(提示:参考 OWASP Top 10),并简要说明风险.

<?php// 假设这是用户更新个人简介的处理器$userId=$_SESSION['id'];$newBio=$_POST['bio'];$conn=newmysqli("localhost","app_user","weakpassword","userdb");$sql="UPDATE users SET bio = '$newBio' WHERE id =$userId";$conn->query($sql);echo"个人简介已更新!";?>

难度:★★☆☆☆
提示:注意 SQL 语句的构造方式和数据库凭据.
参考答案:

  1. SQL 注入(A03):$newBio直接拼接到 SQL 语句中,如果用户提交包含单引号的恶意内容,可能篡改 SQL 逻辑.
  2. 加密机制失效/安全配置缺陷(A02/A05):数据库密码weakpassword是弱密码,且可能硬编码在代码中.
  3. 潜在的信息泄露:如果更新失败,默认的错误显示可能泄露数据库结构信息(取决于php.ini配置).

综合挑战题

5. 威胁建模实践
为你设想的"个人博客系统"绘制一个简单的数据流图(DFD)或列出核心功能模块(如:用户登录、发布文章、评论管理、文件上传).然后,选择一个模块(例如"评论管理"),进行简单的威胁建模思考:

  • 资产:这个模块保护的核心是什么?(如:评论数据的真实性、完整性,防止垃圾评论)
  • 威胁来源:谁可能攻击这个模块?(如:垃圾信息发送者、恶意用户)
  • 可能攻击方式:攻击者会如何利用这个模块?(至少列出两种,可结合本章知识)
  • 初步防护思路:针对你想到的攻击方式,提出一两条防护措施方向.

难度:★★★☆☆
提示:这是对 SDLC 中"设计阶段"的初步模拟.不需要具体代码,思考流程和关联威胁即可.
参考答案示例(针对评论管理模块):

  • 资产:评论内容的质量、真实性;防止网站被注入恶意代码;防止数据库被垃圾数据填塞.
  • 威胁来源:自动化垃圾评论机器人、试图植入恶意链接或脚本的攻击者.
  • 可能攻击方式:
    1. 存储型 XSS 攻击:攻击者在评论框中输入<script>恶意代码</script>,若评论被未经处理地存入数据库并展示给其他用户,则在其浏览器中执行.
    2. SQL 注入:攻击者通过评论提交表单尝试注入 SQL 代码,试图破坏评论数据表或进行拖库.
  • 初步防护思路:
    1. 输入验证与输出转义:对评论内容进行严格的输入检查(如长度、允许的字符),并在前端展示时,使用htmlspecialchars函数对输出进行转义.
    2. 使用参数化查询:将评论内容存入数据库时,必须使用 PDO 预处理语句,从根本上杜绝 SQL 注入.

章节总结

恭喜您完成了第 1 章的学习!本章我们构建了 Web 安全的知识框架:

重点知识回顾:

  1. 安全目标(CIA):保密性、完整性、可用性是所有安全工作的出发点和落脚点.
  2. 核心威胁(OWASP Top 10):我们系统了解了当前 Web 应用面临的最关键风险,特别是失效的访问控制、注入、加密失效、安全配置缺陷和认证失败等与 PHP 开发紧密相关的类别.
  3. 了解对手:我们探讨了攻击者的不同类型及其动机,明白防御需要有的放矢.
  4. 安全开发理念(SDLC/DevSecOps):安全不是阶段性的任务,而是必须贯穿于软件开发整个生命周期的持续过程.
  5. 初识工具:通过搭建简易漏洞靶场和使用 OWASP ZAP 进行被动扫描,我们获得了对安全漏洞和自动化评估工具的直观体验.

技能掌握要求:
完成本章后,您应该能够:

  • 在讨论 Web 安全时,清晰地阐述 CIA 三要素的含义.
  • 列举 OWASP Top 10 中的主要风险类别,并能将其与常见的漏洞现象关联起来.
  • 解释为什么安全需要"左移"(即融入开发早期).
  • 使用类似 OWASP ZAP 的工具对 Web 应用进行基础的被动安全扫描.

进一步学习建议:

  • 访问 [OWASP 官网](https:// owasp.org/) ,下载并阅读《OWASP Top 10 2021》详细文档.
  • 探索 OWASP ZAP 的更多功能,尝试对其提供的"OWASP Juice Shop"等官方靶场进行扫描.
  • 在脑海中回顾您过去或当前的项目,尝试用本章学到的威胁模型去审视它们,列出您认为可能存在的、最值得关注的三个安全问题.带着这些问题,我们将进入下一章,开始构建第一道真正的代码防线——输入验证.

现在,您已经准备好了安全开发的思维武器.从下一章起,我们将拿起代码之盾,深入具体的攻防技术细节.旅程,正式进入实战阶段!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/22 20:56:55

《零基础学 PHP:从入门到实战》·PHP Web 安全开发核心技术与攻防实战演练-深入理解输入验证与数据过滤

第 2 章:第一道防线——深入理解输入验证与数据过滤 章节介绍 学习目标 通过本章学习,您将能够: 深刻理解并应用"所有输入都是有害的"这一安全核心原则掌握针对不同类型数据(字符串、数字、邮箱、URL 等)的验证与过滤方法熟练使用 PHP 内置过滤函数(filter_var, …

作者头像 李华
网站建设 2026/2/27 7:53:45

4、Bash脚本基础入门指南

Bash脚本基础入门指南 1. 编程初体验与脚本基础 编程的乐趣在于创造新事物,就像作者高中时第一次接触计算机,在崭新的TRS - 80上输入第一个BASIC程序: 10 PRINT “KEN WAS HERE”; 20 GOTO 10运行这个程序时,屏幕上不断滚动显示信息,当信息长度能被64整除时,还会整齐…

作者头像 李华
网站建设 2026/2/26 6:46:11

6、Bash表达式与模式匹配全解析

Bash表达式与模式匹配全解析 1. 表达式基础 表达式是用于计算值的公式。Bash有多个内置命令和函数来计算表达式,不同的命令和函数语法和特性有所不同,有时同一表达式有多种计算方式,且存在一些特殊特性用于罕见情况,所以很少有Bash程序员能记住所有细微差别。 2. 扩展类…

作者头像 李华
网站建设 2026/2/21 18:08:51

微信小程序终极任务管理神器:weapp-todos完全使用指南

微信小程序终极任务管理神器&#xff1a;weapp-todos完全使用指南 【免费下载链接】weapp-todos 一个简单的任务清单小程序, awesome weapp demo, todos, todolist 项目地址: https://gitcode.com/gh_mirrors/we/weapp-todos 还在为繁杂的日常任务感到头疼吗&#xff1f…

作者头像 李华
网站建设 2026/2/28 15:06:15

最小二乘问题详解4:非线性最小二乘

1. 引言在论述最小二乘问题的时候&#xff0c;很多文章都喜欢用拟合直线来举例&#xff0c;但是在现实中像拟合直线这样的线性最小二乘问题往往不是常态&#xff0c;现实世界中更多是像投影成像这种非线性最小二乘问题。在本文中&#xff0c;我们就讲解一下非线性最小二乘问题。…

作者头像 李华