PHP函数

对于一些题目中遇到的php函数作用的整理,便于之后的代码审计

hash_equals

作用:检查两个字符串是否相等,而不会通过执行时泄露有关 known_string 内容的任何信息。

参数

  • known_string:必须保密的已知的string
  • user_string:与已知字符串进行比较的用户提供的string

返回值:返回布尔值即当两个参数相等时返回true,否则返回false

1
2
3
4
<?php
error_reporting(0);
var_dump(hash_equals('sha256', ';more f*'));
?>

image-20260226164736091

escapeshellarg

  • 功能: 将字符串转义为安全的shell参数
  • 特点: 在整个字符串周围添加单引号
    将字符串中已有的单引号转义为 '\''(先关闭引号,转义单引号,再打开引号)
    确保字符串被当作一个整体参数传递
1
2
3
4
5
6
7
8
9
10
11
12
13
$input = "it's";
echo escapeshellarg($input);
处理过程:
1.包裹外层引号 → 'it's'
2.转义内部单引号:
在 ' 前关闭引号 → 'it'
插入转义单引号 → '\''
重新打开引号 → 's'
3.最终结果 → 'it'\''s'

Bash解析时:
'it' + \' + 's'
合并后仍是原始字符串 it's

escapeshellcmd()

  • 功能: 转义shell元字符
  • 特点: 转义以下字符:#&;|*?~<>^()[]{}$`、换行符和回车符
    不添加引号
    主要用于转义整个命令中的特殊字符

escapeshellarg()+escapeshellcmd()漏洞产生

1
2
3
4
5
6
$input = "' <?php code ?> -oG evil.php '";
$arg = escapeshellarg($input);
// 结果: ''\'' <?php code ?> -oG evil.php '\'''

$cmd = escapeshellcmd($arg);
// 结果: ''\\'' \<\?php code \?\> -oG evil.php '\\'''

Bash解析的行为

  1. 开头处:’’'‘被解析为字面字符串\

开头的’’是空字符串,\被解释为字面反斜杠,’’也是空字符串

  1. 中间的 -oG evil.php因 引号被破坏而成为独立参数
  2. 末尾:最后的’可能被忽略或与后续内容关联

'\\''' 可以拆解为以下部分:
'\\' → 单引号包裹的两个反斜杠
'' → 空字符串
' → 未闭合的单引号(实际会与后续内容关联)

require_once


PHP函数
https://colourful228.github.io/2026/02/26/PHP函数/
作者
Colourful
发布于
2026年2月26日
更新于
2026年4月21日
许可协议