You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何拦截POST /admin/ HTTP/1.1类攻击,求WHM全局或站点级解决方案

POST /admin/ 请求拦截失效解决方法

原有代码失效原因

你之前写的两段PHP代码未生效,核心原因有三个:

  • 仅在访问/admin/index.php时触发,攻击者访问/admin目录下其他PHP文件即可直接绕过
  • 代码中加了empty($_GET)的判断条件,攻击者只要随便携带一个GET参数(如POST /admin/?t=1)就可以绕过拦截
  • 部分服务器配置下,静态请求、前置代理转发的请求不会走到index.php的执行逻辑,规则自然不会生效

可行解决方案

方案1:.htaccess规则配置(单站点首选,优先级最高)

直接在/admin目录下新建.htaccess文件,添加以下规则即可拦截所有对该目录的POST请求:

<Limit POST>
    Require all denied
</Limit>

如果需要对指定IP开放POST权限,可以调整为:

<Limit POST>
    Require ip 192.168.1.0/24
    Require ip 127.0.0.1
</Limit>

该规则只要服务器支持.htaccess解析就会生效,优先级高于PHP代码,所有对admin目录的请求都会先经过规则校验,直接返回403状态码。

方案2:WHM全局配置(服务器多站点统一拦截首选)

如果需要对服务器上所有站点的/admin目录POST请求做统一拦截,直接在WHM中配置防火墙规则即可:

  1. 若使用CSF防火墙:进入WHM后台「Plugins」-「ConfigServer Security & Firewall」,在自定义规则中添加以下内容:
iptables -I INPUT -p tcp --dport 80 -m string --string "POST /admin/" --algo bm -j DROP
iptables -I INPUT -p tcp --dport 443 -m string --string "POST /admin/" --algo bm -j DROP
  1. 若使用ModSecurity防火墙:添加以下安全规则即可:
SecRule REQUEST_URI "^/admin/" "chain,id:10001,deny,status:403,msg:'Block POST to admin directory'"
SecRule REQUEST_METHOD "^POST$"

全局配置的优势是请求还未走到站点层面就会被拦截,服务器资源消耗更低,防护范围更广。

方案3:修复后PHP全局拦截代码(无服务器配置权限时使用)

如果无法修改.htaccess或者WHM配置,可以将拦截逻辑添加到admin目录下所有PHP文件都会加载的公共入口文件(如config.php、init.php)中,代码如下:

if ($_SERVER['REQUEST_METHOD'] === 'POST' && strpos($_SERVER['REQUEST_URI'], '/admin/') === 0) {
    header($_SERVER['SERVER_PROTOCOL'] . " 403 Forbidden", true);
    exit;
}

注意该方案仅能拦截走PHP解析的请求,无法拦截静态文件的POST请求。

内容的提问来源于stack exchange,提问作者qwertyg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:06:00