Apache Limit POST标签如何仅接受服务器请求?

时间:2020-07-08 03:39:43

标签: php apache php-7 windows-server-2012-r2 apache2.4

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

我尝试过的东西

  • <Location><Directory><Limit>标签及其属性,例如GETPUTPOST PUT DELETE,尝试使用各种组合Require条语句,即localiphostorder allow, deny模式。 Allow all from

  • <Directory "/"><Location ><LimitExcept >标签,包括诸如GETPOST和连击的属性。

  • 各种<if >语句

  • AllowMethod语句

  • .htacess中的目录列入白名单

将尝试放置在不同的文件上下文中。例如httpd.confVhost.conf.htaccess。我在Apache文档中找到的与指令上下文相关的任何文件。甚至将其放置在它不适合咯咯笑的地方。什么都没有,我在文档中阅读或在堆栈上溢出似乎都行得通。

所有身份验证模块都已加载,例如mod_auth,mod_host等。只需假设模块正常即可。

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

下班之前我最后有时间要尝试的是下面的代码,尝试动态的标签,我不想为每种表单挖掘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>

今天我尝试了以下方法 导致Wordpress现在有了500而不是403 我在htaccess文件中尝试过这些

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
AllowMethod POST
<LimitExcept GET>
   Require ip "xx.xx.xx.xx"
</LimitExcept GET>
} 
</IfModule>
<Directory "/.*">
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
AllowMethod POST
<LimitExcept GET>
   Require ip "xx.xx.xx.xx"
</LimitExcept GET>
} 
</IfModule>
<Directory "/">
<IfModule mod_rewrite.c>
RewriteEngine
RewriteEngine On
RewriteBase /
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
RewriteCond req(-R == %{REMOTE_ADDR})
AllowMethod GET POST
order allow,deny
allow from all
<LimitExcept GET>
   Require ip xx.xx.xx.xx
</LimitExcept>
} 
</IfModule>
</Directory>
<Directory "/">
<IfModule mod_rewrite.c>
RewriteEngine
RewriteEngine On
RewriteBase /
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
RewriteCond req(-R == %{REMOTE_ADDR})
#AllowMethod GET POST
AllowOverride All
order allow,deny
allow from all
<LimitExcept GET>
  # Require ip xx.xx.xx.xx
deny from all
</LimitExcept>
} 
</IfModule>
</Directory>

请坚持有关发布的配置的相关解决方案。

1 个答案:

答案 0 :(得分:1)

编写这样的代码

if ($_SERVER['REQUEST_METHOD'] != 'POST') {
     // Your code here
}