web后端安全—PHP网络安全核心知识点总结
一、PHP核心定位
- 运行位置:PHP是后端语言,只在服务器上运行,用户浏览器看不到源码,只能看到运行后的结果(比如网页、文字),相当于网站的“后厨”。
- 核心作用:处理网站核心逻辑,比如验证账号密码、接收表单/文件、操作数据库(存数据、取数据),是前端和数据库之间的“桥梁”。
- 网安必学原因:
- 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. 完整流程
- 用户在前端(HTML表单)输入账号、密码或上传文件;
- 数据通过GET/POST请求传给服务器;
- PHP用
$_GET/$_POST/$_FILES接收数据; - PHP处理数据(比如验证账号密码、拼接文件路径、操作数据库);
- 处理结果(比如“登录成功”页面、存储的文件)返回给用户浏览器。
2. 网安核心:“数据入口”即“漏洞入口”
- 用户传递的所有数据(URL参数、表单内容、上传文件)都是“不可信的”;
- 漏洞本质:PHP代码没过滤/校验这些“不可信数据”,直接使用(比如直接把
$_GET接收的参数拼进SQL语句,就会导致SQL注入)。
四、PHP相关漏洞原理
- SQL注入:PHP用
$_GET/$_POST接收参数后,没过滤特殊字符(比如'、or),直接拼进SQL语句,导致攻击者篡改查询逻辑; - 文件上传漏洞:PHP的
$_FILES接收文件后,没校验文件后缀(比如允许.php恶意文件),或通过$upload_dir . $file_name拼接路径时被篡改,导致恶意文件上传到服务器; - 反序列化漏洞:PHP直接对用户传入的、未校验的字符串执行
unserialize(),导致攻击者构造的恶意序列化字符串被还原,执行恶意代码。
五、学习工具
- 核心工具:PHPStudy;
- 编辑器:Trae;
- 网安用途:搭建本地靶场(比如DVWA),模拟漏洞场景,亲手测试“数据怎么传入、漏洞怎么触发”。
六、核心复习要点
- 记住3个超全局变量(
$_GET/$_POST/$_FILES),知道它们是“数据入口”; - 理解“用户数据不可信”:所有通过上述变量接收的数据,都可能藏着恶意代码,PHP必须过滤/校验;
- 关键语法关联漏洞:字符串拼接(文件上传)、反序列化(反序列化漏洞)、
$_GET/$_POST(SQL注入/XSS); - 不用背代码,重点看“数据流向”:用户→前端→PHP变量→处理逻辑,漏洞往往出在“变量没过滤就用”这一步。