站长进阶:PHP安全加固与防注入实战
|
PHP应用常因开发疏忽成为攻击入口,SQL注入、XSS、文件包含等漏洞频发。站长需从输入、输出、配置、依赖四层面系统加固,而非依赖单一补丁。 所有外部输入均不可信。使用PDO预处理语句替代拼接SQL:绑定参数后,数据库引擎会严格区分数据与指令,从根本上阻断SQL注入。避免使用mysql_函数(已废弃),也不用addslashes()这类易绕过的“消毒”方式。对GET、POST、COOKIE、HTTP头等一切用户可控数据,统一经filter_var()验证类型与范围,如邮箱、URL、整数需明确校验规则。 输出环节须防止XSS。动态内容插入HTML前,务必调用htmlspecialchars()并指定ENT_QUOTES与UTF-8编码;若需保留有限HTML标签(如富文本),则引入HTMLPurifier等成熟库白名单过滤,禁用onerror、javascript:等危险属性与协议。JSON响应中,用json_encode()自动转义,并设置Content-Type为application/json;避免在JS中直接拼接用户数据。 服务器配置是第一道防线。禁用危险函数:在php.ini中设置disable_functions = exec,system,passthru,shell_exec,proc_open,popen,eval,assert,call_user_func,call_user_func_array。关闭错误回显(display_errors=Off),启用错误日志(log_errors=On)并定期审计。web目录外移敏感文件(如配置、日志),确保Web服务器无法直接访问config.php或.env文件。 文件操作风险极高。上传文件时,绝不信任客户端传来的扩展名或Content-Type,应使用finfo_file()校验真实MIME类型,并重命名文件为随机字符串加白名单扩展名(如.jpg、.png)。写入文件路径必须进行标准化处理(realpath + strpos校验是否在允许目录内),防止目录遍历(../../../etc/passwd)。包含外部文件时,禁止动态拼接include/require路径,确有必要则用固定映射数组替代。 及时更新是基础保障。PHP版本低于7.4已停止安全支持,务必升级至8.1+并启用opcache。Composer依赖需定期运行composer audit(或使用SensioLabs Security Checker),替换含已知CVE的旧包。删除未使用的模块与示例脚本(如phpinfo.php、test.php),减少攻击面。
AI渲染图,仅供参考 加固不是一劳永逸。建议部署WAF作为辅助层,但不可替代代码级防护;开启PHP的open_basedir限制脚本可访问路径;对核心操作(如密码修改、支付)增加二次验证或操作日志审计。真正的安全源于对每个变量来源的审慎判断与最小权限原则——少一行危险代码,就少一分被攻陷可能。(编辑:92站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

