在PHP代码审计中,某些函数由于可能引发安全漏洞而被认为是危险的。以下是一些常见的危险函数及其潜在的安全风险:
exec()
: 执行外部程序并返回最后一行输出。system()
: 执行外部程序并显示输出。passthru()
: 执行外部程序并显示原始输出。shell_exec()
: 通过shell执行命令并返回完整的输出。popen()
: 打开一个进程文件指针。proc_open()
: 执行命令并打开文件指针进行输入/输出。
风险: 这些函数允许执行系统命令,如果用户输入未经适当过滤,可能导致命令注入攻击。
include()
: 包含并运行指定文件。require()
: 包含并运行指定文件,如果文件不存在会引发致命错误。include_once()
: 与include()
类似,但确保文件只被包含一次。require_once()
: 与require()
类似,但确保文件只被包含一次。file_get_contents()
: 读取文件内容。file_put_contents()
: 写入文件内容。fopen()
: 打开文件或URL。fwrite()
: 写入文件。unlink()
: 删除文件。
风险: 这些函数可能导致文件包含漏洞(如本地文件包含LFI和远程文件包含RFI),如果用户输入未经过滤,攻击者可以读取、写入或删除任意文件。
mysql_query()
: 执行MySQL查询(已弃用)。mysqli_query()
: 执行MySQLi查询。pg_query()
: 执行PostgreSQL查询。sqlite_query()
: 执行SQLite查询。
风险: 如果用户输入未经适当过滤,可能导致SQL注入攻击。
unserialize()
: 将序列化的字符串转换回PHP值。
风险: 反序列化操作可能导致对象注入攻击,攻击者可以通过构造恶意序列化数据来执行任意代码。
eval()
: 将字符串作为PHP代码执行。
风险: eval()
函数允许执行任意PHP代码,如果用户输入未经过滤,可能导致代码注入攻击。
preg_replace()
: 执行正则表达式搜索和替换。
风险: 如果使用/e
修饰符(已弃用),preg_replace()
可以执行PHP代码,可能导致代码注入。
move_uploaded_file()
: 将上传的文件移动到新位置。
风险: 如果文件上传功能未正确验证文件类型和内容,可能导致恶意文件上传。
session_start()
: 启动新会话或恢复现有会话。session_regenerate_id()
: 更新当前会话ID。
风险: 如果会话管理不当,可能导致会话固定攻击或会话劫持。
echo
: 输出一个或多个字符串。print
: 输出字符串。printf()
: 输出格式化字符串。sprintf()
: 返回格式化字符串。
风险: 如果输出内容未经适当转义,可能导致跨站脚本攻击(XSS)。
header()
: 发送原始HTTP头。setcookie()
: 发送Cookie。
风险: 如果HTTP头或Cookie值未经适当过滤,可能导致HTTP头注入或会话固定攻击。
simplexml_load_string()
: 将XML字符串转换为对象。simplexml_load_file()
: 将XML文件转换为对象。
风险: 如果XML数据来自不可信来源,可能导致XML外部实体(XXE)攻击。
mcrypt_encrypt()
: 使用给定参数加密明文(已弃用)。mcrypt_decrypt()
: 使用给定参数解密密文(已弃用)。
风险: 使用不安全的加密算法或不当的密钥管理可能导致数据泄露。
extract()
: 从数组中将变量导入当前符号表。parse_str()
: 将字符串解析为变量。
风险: 这些函数可能导致变量覆盖或注入攻击。
在PHP代码审计中,识别这些危险函数并确保它们的使用是安全的至关重要。通常需要结合输入验证、输出编码、参数化查询等安全措施来减少潜在的风险。