PHP进阶:小程序安全加固与防注入实战
|
小程序后端常使用PHP构建,但开发者容易忽略安全细节,导致SQL注入、XSS、未授权访问等风险。加固并非堆砌工具,而是从请求入口到数据输出的全链路防御。 所有外部输入必须视为不可信。小程序传递的参数(如code、openId、自定义字段)需严格校验类型、长度与格式。使用filter_var()验证邮箱、URL;用is_numeric()或ctype_digit()判断数字型参数;对JSON字段先json_decode()再检查结构,避免直接unserialize()引发反序列化漏洞。 数据库操作坚决禁用拼接SQL。PDO预处理语句是首选:绑定参数后,无论用户传入“1' OR '1'='1”还是恶意payload,都会被当作字符串字面量处理。同时,为每个数据库连接显式设置PDO::ATTR_EMULATE_PREPARES = false,防止驱动层绕过预处理。 敏感操作必须校验小程序侧身份真实性。不能仅依赖前端传来的openId或unionId——它们可被伪造。应通过微信官方接口(如auth.code2Session)用临时登录凭证code换取真实session_key与openId,并比对返回的unionId是否与请求中一致。会话状态建议存于服务端Redis,设置短过期时间(如30分钟),并绑定设备指纹(如小程序wx.getSystemInfoSync()获取的model+system哈希值)。 文件上传需双重防护:前端限制类型与大小仅为体验优化,后端必须重验。使用move_uploaded_file()前,检查$_FILES['file']['type']不可靠,应调用finfo_open()读取二进制魔数识别真实MIME;保存路径禁止含用户可控路径片段,文件名强制重命名为UUID或时间戳+随机数,扩展名从白名单(如['png','jpg','pdf'])中提取,绝不用原始扩展名。
AI辅助设计图,仅供参考 输出到小程序页面的数据(如接口返回的nickname、content)须防XSS。即使数据来自数据库,也应在JSON响应前调用htmlspecialchars($str, ENT_QUOTES, 'UTF-8')转义双引号与单引号;若需保留简单HTML(如富文本),则使用HTMLPurifier库配置白名单标签与属性,杜绝onerror、javascript:等危险协议。 日志记录避免泄露敏感信息。不记录密码、token、完整手机号、银行卡号;脱敏规则需统一,如手机号显示为1381234;错误信息对用户返回通用提示(如“系统繁忙”),详细堆栈仅写入服务端日志并加密存储。同时,关闭display_errors,防止PHP错误暴露路径与代码结构。 定期更新PHP版本与扩展,禁用危险函数(如eval、exec、system),在php.ini中设置disable_functions = exec,shell_exec,passthru,system,proc_open,popen。配合Web应用防火墙(WAF)规则,拦截高频异常请求(如SQL关键字、base64长串、path traversal特征),形成纵深防御。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

