/cgi-bin/
我的服务器受到机器人等的严重攻击,它们在等等中寻找各种文件search.cgi, YaBB.pl, gitweb.perl, perl, gitweb.pl, htsearch,
。
我想拒绝对/cgi-bin
/ 中所有可能的文件名和扩展名的所有访问(发送 403 Forbidden 标头)。(这是一个共享服务器,因此我只能访问 .htaccess,而不能访问vhosts
或httpd
)。
在 .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
有很多方法可以实现这一点:
使用目录(Apache 2.2 版本):
<Directory /var/www/cgi-bin/> order deny,allow deny from all </Directory>
使用重写条件:
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、不以 / 开头的请求
- 使用更合乎逻辑的方式:
如果您不使用它们,只需从您的 web 文件夹中移动或删除 cgi-bin。