站长进阶:PHP安全加固与防注入实战
|
PHP应用常因开发疏忽成为攻击入口,SQL注入、XSS、文件包含等风险长期威胁站点稳定。加固不是堆砌工具,而是建立防御纵深——从输入到输出,每个环节都需明确边界与规则。 所有外部输入(GET、POST、COOKIE、HTTP头)必须视为不可信。禁用register_globals和magic_quotes_gpc(已废弃),改用filter_var()进行类型化过滤。例如接收ID参数时,强制转为整型:$id = (int)$_GET['id']; 或使用filter_var($_GET['id'], FILTER_VALIDATE_INT)。数字就只认数字,邮箱就只走邮箱正则校验,拒绝模糊处理。 数据库操作务必弃用mysql_系列函数,统一使用PDO或MySQLi,并全程启用预处理语句。即使变量来自内部逻辑,也应坚持绑定参数:$stmt = $pdo->prepare("SELECT FROM users WHERE id = ?"); $stmt->execute([$id]); 有效切断SQL语义与数据的混合可能。 输出到HTML前必须上下文感知地转义。echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8'); 是基础,但若插入到JavaScript或CSS中,则需专用编码器,如json_encode($data, JSON_HEX_TAG | JSON_HEX_AMP)后再嵌入script标签。切忌“一次转义走天下”。 禁止动态拼接文件路径或执行命令。include $_GET['page'] . '.php'类写法极度危险。如需模块化加载,应白名单控制:$allowed = ['home', 'about', 'contact']; $page = in_array($_GET['p'] ?? '', $allowed) ? $_GET['p'] : 'home'; include "$page.php";
AI生成的效果图,仅供参考 启用错误报告分级,生产环境关闭display_errors,仅记录到日志;设置open_basedir限制脚本可访问目录;禁用危险函数(如eval、system、exec),通过php.ini中disable_functions项实现;并确保phpinfo()页面不被公开暴露。安全是持续过程,而非一次性配置。建议定期用PHP_CodeSniffer配合安全规则集扫描代码,结合OWASP ZAP对站点做被动探测,并在关键操作(如登录、密码修改)中引入验证码或IP限流。每一次输入校验、每一次输出转义、每一次函数禁用,都是对站点真实防线的加固。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

