PHP安全架构与防注入实战指南
|
PHP应用面临SQL注入、XSS、命令执行等常见攻击,构建安全架构需从输入、处理、输出三环节系统性设防。开发者不能依赖单一措施,而应形成纵深防御体系。 所有外部输入必须视为不可信数据。无论是GET、POST、COOKIE、HTTP头还是文件上传字段,都应明确声明预期类型与范围。使用filter_var()配合FILTER_VALIDATE_INT、FILTER_SANITIZE_EMAIL等过滤器进行初步清洗,但需注意:过滤不等于消毒,仅用于格式校验;对数字型参数,优先用intval()或type casting强制转换;字符串则宜采用白名单正则(如 /^[a-zA-Z0-9_]+$/)严格限制字符集。 数据库交互必须杜绝拼接SQL。一律采用PDO或MySQLi的预处理语句(Prepared Statements),将参数与SQL逻辑分离。例如:$stmt = $pdo->prepare("SELECT FROM users WHERE id = ? AND status = ?"); $stmt->execute([$id, $status]); 即使$id被构造为'1 OR 1=1',预处理机制也会将其作为纯字符串处理,无法改变语义。切勿在prepare()中动态插入表名或字段名——这些需通过硬编码白名单或预定义映射表控制。
AI绘图,仅供参考 输出至HTML时,务必防止XSS。echo htmlspecialchars($user_input, ENT_QUOTES | ENT_HTML5, 'UTF-8') 是基础防线,针对不同上下文需差异化处理:JavaScript内嵌内容使用json_encode($data, JSON_HEX_TAG | JSON_HEX_APOS);CSS属性值须先正则验证再输出;URL参数用rawurlencode()编码,避免javascript:伪协议绕过。 禁用危险函数是最低要求。在php.ini中关闭exec、system、passthru、shell_exec、eval、assert及反引号操作符;禁用allow_url_include和allow_url_fopen以阻断远程文件包含。同时开启display_errors = Off,启用log_errors = On,将错误日志写入受控目录而非Web可访问路径。 会话安全不容忽视。session_start()前调用session_set_cookie_params(['httponly' => true, 'secure' => true, 'samesite' => 'Lax']),确保Cookie无法被JS读取且仅在HTTPS下传输;登录成功后强制regenerate_id(true),销毁旧会话ID;敏感操作(如密码修改)须重新验证用户凭证,而非仅依赖会话存在性。 建立自动化的安全检查机制。利用Composer集成phpcs + security-checker或PHPStan插件,在CI/CD流程中扫描SQL拼接、危险函数调用、未转义输出等高危模式;部署WAF(如ModSecurity)作为边界补充,但不可替代代码层防护。安全不是一次性任务,而是随业务迭代持续演进的过程。 (编辑:草根网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |


浙公网安备 33038102330554号