对目录中的所有文件“全部拒绝”

对目录中的所有文件“全部拒绝”

/cgi-bin/我的服务器受到机器人等的严重攻击,它们在等等中寻找各种文件search.cgi, YaBB.pl, gitweb.perl, perl, gitweb.pl, htsearch,

我想拒绝对/cgi-bin/ 中所有可能的文件名和扩展名的所有访问(发送 403 Forbidden 标头)。(这是一个共享服务器,因此我只能访问 .htaccess,而不能访问vhostshttpd)。

在 .htaccess 中cgi-bin我试过

deny from all

<FilesMatch "\.cgi?$">
        Order Allow,Deny
        Allow from All
</FilesMatch>

只是为了.cgi扩展,两者都没有运气。

我如何拒绝访问中的所有内容/cgi-bin/

我需要在<FilesMatch指令中列出所有文件名和扩展名吗?

答案1

您知道导致高流量的 IP 或用户代理吗?

<Directory /cgi-bin>
  order deny,allow
  deny from all
</Directory>

另见,

RewriteRule   "cgi(.*)"   "go_away"

答案2

有很多方法可以实现这一点:

  1. 使用目录(Apache 2.2 版本):

    <Directory /var/www/cgi-bin/>
    order deny,allow
    deny from all
    </Directory>
    
  2. 使用重写条件:

    RewriteCond %{REQUEST_URI} ^/cgi-bin
    RewriteRule .* - [END,R=406]
    

您可以将 406 更改为任何您想要的代码,例如 403 表示禁止,您可以在此处找到状态代码列表:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

你甚至可以扩展重写条件以覆盖更多的机器人:

RewriteCond %{HTTP_USER_AGENT} ^-? [OR]
RewriteCond %{REQUEST_URI} ^/cgi [OR,NC]
RewriteCond %{REQUEST_METHOD} !^(GET|HEAD|POST)$ [OR]
RewriteCond %{REQUEST_URI} !^/
RewriteRule .* - [END,R=406]

这些规则阻止空用户代理、以 /cgi 开头的请求、将方法限制为 GET/HEAD/POST、不以 / 开头的请求

  1. 使用更合乎逻辑的方式:

如果您不使用它们,只需从您的 web 文件夹中移动或删除 cgi-bin。

相关内容