插件窝 干货文章 php审计中有哪些危险函数

php审计中有哪些危险函数

函数 文件 执行 风险 321    来源:    2025-03-16

在PHP代码审计中,某些函数由于可能引发安全漏洞而被认为是危险的。以下是一些常见的危险函数及其潜在的安全风险:

1. 执行系统命令的函数

  • exec(): 执行外部程序并返回最后一行输出。
  • system(): 执行外部程序并显示输出。
  • passthru(): 执行外部程序并显示原始输出。
  • shell_exec(): 通过shell执行命令并返回完整的输出。
  • popen(): 打开一个进程文件指针。
  • proc_open(): 执行命令并打开文件指针进行输入/输出。

    风险: 这些函数允许执行系统命令,如果用户输入未经适当过滤,可能导致命令注入攻击。

2. 文件操作函数

  • include(): 包含并运行指定文件。
  • require(): 包含并运行指定文件,如果文件不存在会引发致命错误。
  • include_once(): 与include()类似,但确保文件只被包含一次。
  • require_once(): 与require()类似,但确保文件只被包含一次。
  • file_get_contents(): 读取文件内容。
  • file_put_contents(): 写入文件内容。
  • fopen(): 打开文件或URL。
  • fwrite(): 写入文件。
  • unlink(): 删除文件。

    风险: 这些函数可能导致文件包含漏洞(如本地文件包含LFI和远程文件包含RFI),如果用户输入未经过滤,攻击者可以读取、写入或删除任意文件。

3. 数据库操作函数

  • mysql_query(): 执行MySQL查询(已弃用)。
  • mysqli_query(): 执行MySQLi查询。
  • pg_query(): 执行PostgreSQL查询。
  • sqlite_query(): 执行SQLite查询。

    风险: 如果用户输入未经适当过滤,可能导致SQL注入攻击。

4. 反序列化函数

  • unserialize(): 将序列化的字符串转换回PHP值。

    风险: 反序列化操作可能导致对象注入攻击,攻击者可以通过构造恶意序列化数据来执行任意代码。

5. eval()

  • eval(): 将字符串作为PHP代码执行。

    风险: eval()函数允许执行任意PHP代码,如果用户输入未经过滤,可能导致代码注入攻击。

6. 正则表达式函数

  • preg_replace(): 执行正则表达式搜索和替换。

    风险: 如果使用/e修饰符(已弃用),preg_replace()可以执行PHP代码,可能导致代码注入。

7. 文件上传函数

  • move_uploaded_file(): 将上传的文件移动到新位置。

    风险: 如果文件上传功能未正确验证文件类型和内容,可能导致恶意文件上传。

8. 会话管理函数

  • session_start(): 启动新会话或恢复现有会话。
  • session_regenerate_id(): 更新当前会话ID。

    风险: 如果会话管理不当,可能导致会话固定攻击或会话劫持。

9. 输出函数

  • echo: 输出一个或多个字符串。
  • print: 输出字符串。
  • printf(): 输出格式化字符串。
  • sprintf(): 返回格式化字符串。

    风险: 如果输出内容未经适当转义,可能导致跨站脚本攻击(XSS)。

10. HTTP头操作函数

  • header(): 发送原始HTTP头。
  • setcookie(): 发送Cookie。

    风险: 如果HTTP头或Cookie值未经适当过滤,可能导致HTTP头注入或会话固定攻击。

11. XML处理函数

  • simplexml_load_string(): 将XML字符串转换为对象。
  • simplexml_load_file(): 将XML文件转换为对象。

    风险: 如果XML数据来自不可信来源,可能导致XML外部实体(XXE)攻击。

12. 加密函数

  • mcrypt_encrypt(): 使用给定参数加密明文(已弃用)。
  • mcrypt_decrypt(): 使用给定参数解密密文(已弃用)。

    风险: 使用不安全的加密算法或不当的密钥管理可能导致数据泄露。

13. 其他危险函数

  • extract(): 从数组中将变量导入当前符号表。
  • parse_str(): 将字符串解析为变量。

    风险: 这些函数可能导致变量覆盖或注入攻击。

总结

在PHP代码审计中,识别这些危险函数并确保它们的使用是安全的至关重要。通常需要结合输入验证、输出编码、参数化查询等安全措施来减少潜在的风险。