如何禁止PHP include()加载非.php文件?WordPress站点防护需求
多WordPress站点入侵后的临时加固方案(含include加载限制)
核心问题解答
可以限制include()/include_once()等函数仅加载.php后缀的文件,这是针对当前篡改场景的有效临时防护手段。
具体实现方法
1. 通过PHP钩子限制include文件后缀
创建一个全局前置脚本(比如/usr/local/php/secure-include.php),覆盖原生include类函数并校验文件后缀:
<?php // 校验文件后缀的安全函数 function secure_validate_file($file) { $ext = pathinfo($file, PATHINFO_EXTENSION); if ($ext !== 'php') { error_log("Blocked include of non-PHP file: {$file}"); die('Invalid file inclusion'); } return true; } // 覆盖原生include函数 rename_function('include', 'original_include'); override_function('include', '$file', 'secure_validate_file($file); return original_include($file);'); // 同理覆盖其他包含函数 rename_function('include_once', 'original_include_once'); override_function('include_once', '$file', 'secure_validate_file($file); return original_include_once($file);'); rename_function('require', 'original_require'); override_function('require', '$file', 'secure_validate_file($file); return original_require($file);'); rename_function('require_once', 'original_require_once'); override_function('require_once', '$file', 'secure_validate_file($file); return original_require_once($file);'); ?>
然后在php-fpm的站点池配置(或全局php.ini)中添加:
php_admin_value[auto_prepend_file] = /usr/local/php/secure-include.php
重启php-fpm生效。
2. 其他临时加固措施
考虑到服务器将在两周后更换,优先实施快速见效的防护:
- 批量修复篡改文件:使用
wp-cli批量验证并修复WordPress核心文件:wp core verify-checksums --all wp core update --force --all - 清理可疑插件/主题:禁用所有未使用的插件、主题,重新下载安装当前在用的插件/主题(避免已被篡改)。
- 数据库权限收紧:给每个WordPress站点的数据库用户分配最小权限(仅
SELECT/INSERT/UPDATE/DELETE,移除CREATE/DROP等高级权限)。 - Nginx访问控制:添加规则拦截敏感文件访问:
location ~* (wp-config\.php|\.htaccess|wp-content/uploads/.*\.php) { deny all; return 404; } - PHP权限限制:确保php-fpm运行用户仅拥有对应站点目录的读写权限,禁止跨目录访问。
- 强化Fail2Ban规则:新增规则监控
wp-login.php、xmlrpc.php等敏感路径的频繁访问,自动拉黑异常IP。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

