PHP安全进阶:实战防注入与防护全攻略
|
PHP应用常因输入处理不当成为SQL注入、XSS、命令执行等攻击的入口。防御不能仅靠过滤函数或黑名单,而需建立分层防护体系,从数据流转的每个环节切断风险路径。 SQL注入仍是高危威胁。绝不可拼接用户输入构造SQL语句。必须统一使用PDO或MySQLi的预处理机制:将SQL模板与参数严格分离。例如,查询用户时应写为$stmt = $pdo->prepare("SELECT FROM users WHERE id = ?"); $stmt->execute([$id]);,而非"SELECT FROM users WHERE id = $id"。即使配合intval()或htmlspecialchars()也非万全——类型校验与上下文转义不能替代参数化查询。 XSS漏洞多源于未对输出内容做上下文感知的编码。向HTML主体插入变量时,用htmlspecialchars($data, ENT_QUOTES | ENT_HTML5, 'UTF-8');写入JavaScript字符串时,则需JSON编码:echo "var user = " . json_encode($user, JSON_UNESCAPED_UNICODE) . ";";若动态生成CSS或URL,分别采用css_escape()(自定义函数)和urlencode()。单靠一处过滤无法覆盖全部场景,必须按输出位置选择对应编码策略。 文件操作类功能极易引发路径遍历或远程代码执行。读取文件前务必规范化路径:$path = realpath('uploads/' . $_GET['file']);并验证是否仍位于预期目录内:if (strpos($path, realpath('uploads/')) !== 0) { die('Invalid path'); }。禁用eval()、assert()、create_function()等动态执行函数;禁用system()、exec()等外壳调用,确需执行外部命令时,仅允许白名单命令,并用escapeshellarg()严格转义每个参数。 会话与认证环节不容忽视。启用session.cookie_httponly = 1、session.cookie_secure = 1(HTTPS环境),避免JavaScript窃取Session ID;登录成功后务必调用session_regenerate_id(true)更新ID并销毁旧会话;密码存储必须使用password_hash($pwd, PASSWORD_ARGON2ID),验证时用password_verify(),杜绝MD5、SHA1等弱哈希。
AI生成3D模型,仅供参考 部署阶段须关闭调试信息:设置display_errors = Off,log_errors = On,防止错误泄露路径、数据库结构等敏感细节。利用Composer安装安全依赖如paragonie/random_compat(PHP7.0+已内置random_bytes),确保加密随机数质量。定期扫描项目依赖:运行composer audit或使用SensioLabs Security Checker检测已知漏洞库。安全不是功能开关,而是贯穿开发生命周期的习惯。每一份用户输入都应被质疑,每一次输出都需明确上下文,每一处外部交互都要设防。自动化工具可辅助,但无法替代开发者对数据流向的理解与警惕。 (编辑:开发网_新乡站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


浙公网安备 33038102330465号