有大量的bot请求通过URL wp-login.php?action=register
到我的WP网站,以创建垃圾用户。我想使用Nginx阻止所有这些人
我已尝试根据此帖子https://stackoverflow.com/a/48614915/6563638
在conf以下应用location = /wp-login.php {
if ( $args ~ ^action=register ) {
return 403;
}
}
location / {
try_files $uri $uri/ /index.php?$args;
}
对wp-login.php?action=register
的所有请求都已成功返回403。但是,对wp-login.php
的其他请求现在完全是文件下载请求。我不能将它们传递给PHP CGI来执行。
有人知道这个问题的解决方案吗?
答案 0 :(得分:1)
我从这里https://gist.github.com/jrom/1760790找到了一个干净清晰的解决方案。尽管遵循该帖子中使用map
的评论会简短而优雅,但我发现尝试使用if
语句更容易理解“如果是邪恶的”。
这是我的WP网站的conf
server {
listen 80;
server_name ....;
root ...;
index index.php;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
if ( $request_filename = "${document_root}/wp-login.php" ) {
set $login "1";
}
if ( $arg_action = "register") {
set $login "${login}2";
}
if ( $login = "12" ){
return 403;
}
location /portal/ {
try_files $uri $uri/ /portal/index.php?$args;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_buffer_size 256k;
fastcgi_buffers 4 256k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
答案 1 :(得分:0)
1。。为什么不只是禁用新用户注册?您可以在WordPress信息中心>设置中找到最简单的方法。即使您更改服务器,该设置也将保留。想象一下您将来会改用Apache。
2。。您的Nginx规则似乎很糟糕,但是有两个问题:
location
文件的.php
块在哪里传递给PHP FastCGI?是否仅发生wp-login.php
或所有其他.php
文件?action=register
开头的参数。我可以将请求更改为?s=1&action=register
并完成。 (s
对WordPress无效,只能绕过您的规则。)3。。请勿编辑任何WordPress核心文件链接@ num8er的建议。您的更改将确定会通过WordPress更新恢复。但是您也应该按照以下规则阻止它们:
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}