web后端安全—PHP网络安全核心知识点总结

4 阅读2分钟

web后端安全—PHP网络安全核心知识点总结

一、PHP核心定位

  1. 运行位置:PHP是后端语言,只在服务器上运行,用户浏览器看不到源码,只能看到运行后的结果(比如网页、文字),相当于网站的“后厨”。
  2. 核心作用:处理网站核心逻辑,比如验证账号密码、接收表单/文件、操作数据库(存数据、取数据),是前端和数据库之间的“桥梁”。
  3. 网安必学原因
    • 80%以上中小型网站、论坛、政务系统用PHP开发,漏洞极多,是渗透测试的主要目标;
    • 多数Web漏洞(SQL注入、文件上传、XSS)都和PHP代码不严谨有关,看不懂PHP就不懂漏洞原理;
    • 入门成本低,只需学网安相关基础,不用掌握完整开发体系。

二、PHP基础语法

1. 核心标识与规则

  • PHP代码必须放在 <?php ... ?> 标签里(服务器识别PHP的标志);
  • 变量以 $ 开头(比如 $username 存用户名、$file_name 存文件名),是网安中找“数据容器”的关键;
  • 字符串拼接用英文点号 .(比如 $file_path = $upload_dir . $file_name),是文件上传漏洞的核心语法(攻击者靠这个篡改文件路径)。

2. 流程控制

  • 核心是 if 语句:满足条件才执行代码(比如验证“账号密码正确”才允许登录);
  • 网安意义:漏洞利用常需“满足某个条件”(比如让 if 成立才能拿到flag、执行恶意代码)。

3. 超全局变量

  • 定义:PHP内置的、直接能用的变量,专门接收用户从浏览器传递的数据,是所有Web漏洞的关键入口;
  • 三个核心变量(必须记住):
    变量名作用网安关联场景
    $_GET接收URL里的参数(比如 ?user=admin容易被SQL注入、XSS攻击
    $_POST接收表单提交的数据(比如登录密码)密码等敏感数据传递,后端必须校验
    $_FILES接收用户上传的文件(比如图片、文档)文件上传漏洞的直接关联变量

4. 序列化与反序列化

  • 序列化 serialize():把对象/数据转成字符串(方便传输、存储);
  • 反序列化 unserialize():把字符串还原回原来的对象/数据;
  • 网安意义:攻击者可构造恶意序列化字符串,通过 unserialize() 执行恶意代码(反序列化漏洞);
  • 案例:比如要求 unserialize($str) === "ZS" 才能拿flag,攻击者只需构造对应的序列化字符串 s:2:"ZS" 传入即可。

三、Web交互流程

1. 完整流程

  1. 用户在前端(HTML表单)输入账号、密码或上传文件;
  2. 数据通过GET/POST请求传给服务器;
  3. PHP用 $_GET/$_POST/$_FILES 接收数据;
  4. PHP处理数据(比如验证账号密码、拼接文件路径、操作数据库);
  5. 处理结果(比如“登录成功”页面、存储的文件)返回给用户浏览器。

2. 网安核心:“数据入口”即“漏洞入口”

  • 用户传递的所有数据(URL参数、表单内容、上传文件)都是“不可信的”;
  • 漏洞本质:PHP代码没过滤/校验这些“不可信数据”,直接使用(比如直接把 $_GET 接收的参数拼进SQL语句,就会导致SQL注入)。

四、PHP相关漏洞原理

  1. SQL注入:PHP用 $_GET/$_POST 接收参数后,没过滤特殊字符(比如 'or),直接拼进SQL语句,导致攻击者篡改查询逻辑;
  2. 文件上传漏洞:PHP的 $_FILES 接收文件后,没校验文件后缀(比如允许 .php 恶意文件),或通过 $upload_dir . $file_name 拼接路径时被篡改,导致恶意文件上传到服务器;
  3. 反序列化漏洞:PHP直接对用户传入的、未校验的字符串执行 unserialize(),导致攻击者构造的恶意序列化字符串被还原,执行恶意代码。

五、学习工具

  • 核心工具:PHPStudy;
  • 编辑器:Trae;
  • 网安用途:搭建本地靶场(比如DVWA),模拟漏洞场景,亲手测试“数据怎么传入、漏洞怎么触发”。

六、核心复习要点

  1. 记住3个超全局变量($_GET/$_POST/$_FILES),知道它们是“数据入口”;
  2. 理解“用户数据不可信”:所有通过上述变量接收的数据,都可能藏着恶意代码,PHP必须过滤/校验;
  3. 关键语法关联漏洞:字符串拼接(文件上传)、反序列化(反序列化漏洞)、$_GET/$_POST(SQL注入/XSS);
  4. 不用背代码,重点看“数据流向”:用户→前端→PHP变量→处理逻辑,漏洞往往出在“变量没过滤就用”这一步。