php进阶网络安全随手记
杂项知识
1.在低版本的php中,科学计数法的长度是按字符串来算的。因此可以使用科学计数法来绕过长度限制。
因此$a = "1e9"符合条件
if (isset($a) && intval($a) > 6000000 && strlen($a) <= 3)
2.php是弱类型的语言,php数字与字符串比较时会自动进行解析并在第一个非数字处截断,将截断的字符串当做数字进行比较。而字符串本身类型不是数字
<?php
$a = "1234c";
echo "输出:".(string)($a>1233);//true 1234>1233
echo "输出:".(string)(is_numeric($a))//false
?>
3.在php7.x版本中,"字符串"==0的结果为true
在php7.x版本中,php会自动把字符串转换为数字再比较
"ejcf" → 0
所以
"ejcf" == 0 // true
在PHP8及以后版本中,PHP改进了弱比较的规则,为了避免逻辑漏洞
当字符串不是纯数字时,不再自动转为
0,而是直接判定为flase
🧪 PHP7 与 PHP8 字符串与数字比较结果对比
| 表达式 | PHP 7.x 结果 | PHP 8+ 结果 | 说明 |
|---|---|---|---|
"0" == 0 |
✅ true | ✅ true | 字符串是数字 0 |
"123" == 123 |
✅ true | ✅ true | 字符串是数字 |
"abc" == 0 |
✅ true | ❌ false | 非数字字符串(PHP8 不再转为 0) |
"" == 0 |
✅ true | ✅ true | 空字符串视为 0 |
" " == 0 |
✅ true | ✅ true | 仅空格字符串视为 0 |
"123abc" == 123 |
✅ true | ✅ true | 数字前缀被识别 |
"abc123" == 123 |
✅ true | ❌ false | 非数字开头,不再转为 0 |
4.在传统url传参时,正常传字符串不需要双引号,例如?a=1e9即可,而不是?a="1e9"
5.php在读取url参数时,就会默认进行一次url解码
1.PHP 超全局数组示例
1. 示例代码:demo.php
<?php
// ----------------------
// 1. 使用 $_GET 获取 URL 参数
// URL: demo.php?name=Alice&age=20
$name = $_GET['name'] ?? '未知';
$age = $_GET['age'] ?? 0;
echo "姓名:$name,年龄:$age\n";
// ----------------------
// 2. 使用 $_POST 获取表单数据
// 假设 HTML 表单 method="POST"
// <form method="POST"><input name="email"><input name="password"></form>
$email = $_POST['email'] ?? '未提交';
$password = $_POST['password'] ?? '';
echo "邮箱:$email\n";
// ----------------------
// 3. 使用 $_SERVER 获取服务器信息
echo "当前脚本路径:" . $_SERVER['PHP_SELF'] . "\n";
echo "请求方法:" . $_SERVER['REQUEST_METHOD'] . "\n";
2. 说明
$_GET['name']→ 获取 URL 参数name$_POST['email']→ 获取 POST 表单提交的数据$_SERVER['PHP_SELF']→ 当前脚本路径??是 PHP 7+ 的 空合并运算符,用于避免未定义索引报错
3. 超全局数组常用列表
| 数组 | 用途 |
|---|---|
$_GET |
获取 GET 请求参数 |
$_POST |
获取 POST 请求参数 |
$_REQUEST |
同时获取 GET/POST/COOKIE 参数 |
$_SERVER |
服务器信息、请求信息 |
$_COOKIE |
获取客户端 Cookie |
$_SESSION |
会话数据 |
$_FILES |
上传文件信息 |
$_ENV |
环境变量 |
4. 小结
- PHP 中的超全局数组可以在 任何作用域 下直接使用,无需
global声明。 - 常用于获取用户输入、请求信息和服务器信息。
- 使用空合并运算符
??可以避免未定义索引导致的报错。
2.??运算符
基本用法
$value = $a ?? $b;
- 含义
- 如果
$a存在且不为null,则$value = $a - 否则,
$value = $b
- 如果
等价写法(旧式php)
$value = isset($a) ? $a : $b;
3. 优先级
关系运算符 > 逻辑非 ! > 逻辑与 && > 逻辑或 || > 低优先级逻辑运算符 and、or
4. @的作用
在 PHP 中,@ 是 错误控制操作符。
-
作用:屏蔽表达式执行时产生的 错误/警告信息。
-
语法:@表达式
-
特点:即使发生错误,脚本也会继续运行,但不会输出错误提示。
5. include:引入指定文件
示例1:引入一个文件
// 文件:config.php
<?php
$siteName = "My Website";
?>
// 文件:index.php
<?php
include 'config.php';
echo $siteName; // 输出:My Website
👉 执行
include 'config.php'; 后,$siteName就可以在当前文件中使用了。
示例2:文件不存在时
include 'not_found.php';
echo "继续执行";
输出:
Warning: include(not_found.php): failed to open stream...
继续执行
⚠️ include 报错是 警告(Warning)级别,
程序仍会继续往下执行。

浙公网安备 33010602011771号