Apache 如何设置 Limit POST 来接受严格的本地服务请求?

Apache 如何设置 Limit POST 来接受严格的本地服务请求?

我正在努力强化Apache 2.4Web 服务器运行 2 个 wordpress 站点,具有单独的 vhost 设置。部署在 Windows 2012 r2 上。几周前我被黑客入侵,服务器完全瘫痪。在新服务器上,他们仍在尝试通过发布请求注入/代码执行来入侵站点。我尝试阻止POST提交时未由服务器发送的所有请求时遇到了麻烦。

我尝试过的事情包括

  • <Location>、、<Directory>标签<Limit>及其属性,如、、GET尝试使用各种语句进行各种组合,即、、、和模式。PUTPOST PUT DELETERequirelocaliphostorder allow, denyAllow all from

  • <Directory "/">、、<Location >标签包括、和组合<LimitExcept >等属性。GETPOST

  • 各种<if >声明

  • AllowMethod声明

  • 将目录列入白名单.htacess

在不同的文件上下文中尝试。例如httpd.conf,,Vhost.conf.htaccess我发现在 Apache 文档中引用的任何文件都与指令上下文有关。甚至把它放在不应该工作的地方,真是可笑。我在文档或 stack overflow 上读到的似乎都不起作用。

所有 auth 模块都已加载,如 mod_auth、mod_host 等。假设模块都没有问题。

我想要实现的是deny<Limit POST>请求。严格允许它们以动态方式<Directory "/.*"> or响应,只有当服务器使用服务器 IP 提交请求时才响应。因此,请求的 IP:port 应该是“远程地址”,因为 apache 本地服务通过 PHP 发送请求方法。我相信这是正确的逻辑。

下班前我尝试的最后一件事是下面的代码,尝试动态`<Directory“/.*”>标签,我不想在 Wordpress 中挖掘每个表单并为每个目录创建一个标签。

谢谢您的帮助,请在您的答案中附上一个代码示例。

<Directory "/.*">
<if "%{REQUEST_METHOD} == 'POST'">
<Limit POST PUT DELETE>
Require req, http %{REMOTE_ADDR} == 'xx.xx.xx.xx:xx'
</Limit>
</if>
</Directory>

现在我尝试了

<Directory "/"> 
<if "($_SERVER['%{REMOTE_ADDR}'] == 'xx.xx.xx.xx'">
<Limit POST>
allow from all
</Limit>
</if>
</Directory>
<Directory "/"> 
<if "($_SERVER['REMOTE_ADDR'] == 'xx.xx.xx.xx'">
<Limit POST>
allow from all
</Limit>
</if>
</Directory>

没有插件,没有 nginx、E xpress 或 IIS 建议。只有与此配置相关的解决方案。

答案1

POST 由用户的浏览器完成。如果 Apache 的访问日志显示请求来自同一系统,那么该系统上可能首先运行的是其他软件,例如 Varnish 或 HaProxy 等 Web 缓存。检查标头 X-Forwarded-For 是否包含用户的 IP 地址。如果您想保护 Wordpress 免受黑客攻击(这并不容易),您需要对 Wordpress 本身进行改进。更改登录页面的名称,为管理员设置一个无法猜测或暴力破解的密码,最后但并非最不重要的是,让 Wordpress 保持最新状态,以便修补已知的漏洞。

相关内容