与漏洞相关的一些php函数总结 一sql注入相关函数1mysqli_real_escape_string()此函数用于转义sql语句中的特殊字符如单引号双引号反斜杠等但是要注意的是这是MySQLi扩展专用需在数据库连接状态下使用,2PDO::quote()转义SQL字符串中的特殊字符3addslashes()在预定义字符单引号、双引号、反斜杠、NULL前添加反斜杠44filter_var()过滤和验证数据配合FILTER_SANITIZE_STRING等过滤器使用。用于清理用户输入5intval()将变量转为整数类型用于解析id年龄等数字型参数防止非数字输入进入sql防御方式最重要的使用预处理语句$query SELECT * FROM users WHERE username . $_POST[username] . ;$stmt $pdo-prepare(SELECT * FROM users WHERE username :username);$stmt-bindParam(:username, $_POST[username]);$stmt-execute();其他的防御措施关闭错误提示display_errors Off对数字型参数使用intval()强制类型转换使用白名单验证绝不直接拼接用户输入二、xss漏洞、相关函数1htmlspecialchars()将特殊的字符转换成html实体如,,,,等。第二个参数用ENT_QUOTES可同时转义单双引号2htmlentities()将所有非ASCII字符转换为HTML实体比htmlspecialchars更激进可能影响正常内容显示3strip_tags()去除字符串中的HTML、JavaScript和PHP标签但同时可能导致数据丢失需要谨慎使用4,filter_var()配合FILTER_SANITIZE_STRING过滤器清理数据5xss_clean()CodeIgniter框架提供的XSS过滤函数属于框架专用防御方式核心原则输出时转义而非输入时过滤或者设置CSP内容安全策略头header(Content-Security-Policy: default-src self)遵循白名单原则明确允许字符范围而非禁止危险字符采用纵深防御策略结合输入验证与输出转义三、文件上传漏洞相关函数1move_uploaded_file()将上传的函数移动到指定位置这是核心上传函数审计重点检查是否限制格式2is_uploaded_file()验证函数是否通过http post上传防止恶意用户欺骗脚本访问其他文件3finfo_open() finfo_file()获取文件的真实MIME类型服务器端检查文件类型不依赖客户端4pathinfo()返回文件路径信息配合PATHINFO_EXTENSION获取扩展名用于验证文件扩展名5getimagesize()获取图像大小验证文件头是否为有效图像但是只验证文件头导致可被伪造6bin2hex(random_bytes())生成随机文件名防止文件名冲突和路径遍历防御方式检查文件类型使用finfo_file()获取真实MIME类型不信任客户端提供的$_FILES[file][type]限制文件扩展名使用白名单如只允许jpg、png用in_array()或严格比对重命名上传文件使用随机唯一文件名如bin2hex(random_bytes(16)) . . . $ext存储到不可执行目录确保上传目录无执行权限移除空字节防止shell.php%00.jpg类绕过验证文件大小限制上传文件大小四、越权漏洞相关函数1session_start()启动或恢复会话是会话管理的基础2$_SESSION储存和访问会话数据列如用户的身份信息3session_regenerate_id()重新生成会话ID 防止会话固定攻击4password_hash()创建密码哈希 这样可以安全 的存储密码5password_verify()验证密码是否匹配哈希 用于登录验证防御方式服务端会话校验每个受限页面必须检查$_SESSION[user_id]是否存在且有效权限验证不仅验证是否登录还要验证是否有权操作特定资源如用户只能修改自己的数据防止未授权访问所有后台/管理页面必须引用统一的鉴权文件会话安全使用session_regenerate_id()防止会话固定攻击禁用session.use_trans_sid防止通过URL传递会话ID敏感操作二次验证修改密码、支付等操作需额外验证其他高危PHP函数以下函数在渗透测试和代码审计中需要重点关注代码执行 eval(), assert(), preg_replace()带e修饰符, create_function()命令执行 system(), exec(), shell_exec(), passthru(), popen(), proc_open()文件包含 include(), include_once(), require(), require_once()