phpmyadmin本身不控制http请求方法,所有方法拦截必须由web服务器(apache/nginx)实现:apache用,nginx用if ($request_method !~ ^(get|head|post)$) { return 405; },php层限制不可靠且无效。
phpmyadmin 本身不控制 http 请求方法
phpmyadmin 是一个 php 应用,它不自行拦截或拒绝 put、delete、trace 等非标准 web 管理请求;所有 http 方法的放行或拦截,完全由其运行所依赖的 web 服务器(apache / nginx)决定。你看到 phpmyadmin 响应了某个方法(比如 get 正常加载页面,post 提交登录),只是因为 web 服务器允许了该方法到达 php 脚本,并非 phpmyadmin 主动做了路由或方法校验。
在 Apache 中限制 phpMyAdmin 的 HTTP 方法
最常用且有效的做法是在 Apache 的 phpMyAdmin 目录配置中显式声明允许的方法。这能直接在协议层拒绝非法请求,避免 PHP 解析和执行开销。
你需要编辑 phpMyAdmin 对应的 <directory></directory> 块(路径通常为 /etc/apache2/conf-available/phpmyadmin.conf 或 C:\wamp64\alias\phpmyadmin.conf),加入 LimitExcept 指令:
<directory>
# ... 其他配置(如 Require local)...
<limitexcept get post head>
Require all denied
</limitexcept></directory>
关键点:
-
GET和POST是 phpMyAdmin 正常运行必需的:页面加载、表单提交、AJAX 查询都依赖它们 -
HEAD建议保留,很多健康检查、CDN 预检、爬虫探测会发HEAD,拒绝可能导致误报或监控失败 - 不要加
OPTIONS到白名单里——除非你明确需要 CORS 预检支持(phpMyAdmin 默认不跨域,一般不需要) - 修改后必须重启 Apache:
sudo systemctl restart apache2(Debian/Ubuntu)或httpd -t && sudo systemctl restart httpd(RHEL/CentOS)
在 Nginx 中限制 phpMyAdmin 的 HTTP 方法
Nginx 没有 LimitExcept,需用 if + return 组合实现等效逻辑,但要注意 if 在 location 块中的执行顺序限制。
在 phpMyAdmin 的 location 块内添加:
location /phpmyadmin {
alias /usr/share/phpmyadmin/;
# ... 其他 fastcgi_pass / root 配置 ...
if ($request_method !~ ^(GET|HEAD|POST)$) {
return 405;
}
}
注意:
-
return 405表示 “Method Not Allowed”,比403更语义准确 -
$request_method是 Nginx 内置变量,大小写敏感,务必用大写(GET,不是get) - 不能把
if放在fastcgi_pass之后——Nginx 的if在location中只应在最外层使用,否则可能被忽略 - 改完需重载配置:
sudo nginx -t && sudo systemctl reload nginx
为什么不用 PHP 层做方法限制
有人想在 config.inc.php 开头加一段判断:
if (!in_array($_SERVER['REQUEST_METHOD'], ['GET', 'POST'])) {
http_response_code(405);
die('Method not allowed');
}
这种写法看似简单,但存在明显问题:
- PHP 已经完成解析、初始化 session、加载配置——攻击者已触发服务端资源消耗
- 无法阻止恶意扫描器反复发送
TRACE或PUT探测,造成日志膨胀和潜在 DoS - 如果 phpMyAdmin 因权限或扩展缺失提前报错(如
mbstring未启用),这段代码根本不会执行 - 违反分层原则:HTTP 方法是传输层语义,应在 Web 服务器层面终结,而非推到应用层
真正需要限制方法时,Web 服务器配置是唯一可靠、低开销、可审计的落地方案。别试图绕过它去“修” phpMyAdmin 的 PHP 代码——那不是加固,是给漏洞留后门。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











