Admin-ajax.php垃圾邮件增加了CPU负载

时间:2017-10-13 作者:flowdee

我体验到,我的服务器收到了99%的CPU负载,站点几乎停机。

已检查访问日志文件,有大量以下条目:

203.115.XXX.XXX - - [13/Oct/2017:12:40:01 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.0" 200 178
212.92.XXX.XXX - - [13/Oct/2017:12:40:01 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0" 200 1
218.29.XXX.XXX - - [13/Oct/2017:12:40:02 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0" 200 1
104.130.XXX.XXX - - [13/Oct/2017:12:40:02 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0" 200 1
176.123.XXX.XXX - - [13/Oct/2017:12:40:02 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.0" 200 178
45.115.XXX.XXX - - [13/Oct/2017:12:40:03 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0" 200 1
212.92.XXX.XXX - - [13/Oct/2017:12:40:03 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.0" 200 178
31.179.XXX.XXX - - [13/Oct/2017:12:40:04 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0" 200 1
92.240.XXX.XXX - - [13/Oct/2017:12:40:07 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0" 200 1
92.240.XXX.XXX - - [13/Oct/2017:12:40:07 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0" 200 1
61.5.XXX.XXX - - [13/Oct/2017:12:40:07 +0000] "POST /wp-admin/admin-ajax.php HTTP/1.0" 200 178
201.59.XXX.XXX - - [13/Oct/2017:12:40:07 +0000] "GET /wp-admin/admin-ajax.php HTTP/1.0" 200 1
在几个小时内,几乎有800个相同IP的单个请求。这对我来说似乎不太自然。此外,据分析,发生这种情况时,页面上的用户并不多。

因此,这起袭击似乎来自外部,并影响了我的服务器电源。

阻止访问管理ajax时。php文件,cpu负载恢复到1-3%,一切正常。

我的问题是:有没有办法block these spamming requests to the admin-ajax.php 来自“的文件”;“外部”;and only allow installed plugins/theme to access the admin-ajax.php file instead?

更新

我的网站似乎真的被一些机器人/服务器垃圾邮件了。

尝试了几种方法,如Cloudflare、不同的托管等。唯一有帮助的是使用Sucuri 作为阻止一切的网站防火墙。

3 个回复
SO网友:Mark Kaplun

不,没有办法,就像有办法阻止“垃圾邮件发送者”访问你的主页一样。我的意思是,你可以进行各种检查,但最终你会破坏网站的行为方式,这意味着某个地方的人不会得到他的内容。如果你只有一个博客,也许只要你的朋友和家人能读,你就不在乎了,但如果你真的用你的网站赚钱,你可能会更在乎。

与其查看日志,不如问问自己,为什么一个除了引导wordpress之外什么都不做的请求会让你的网站瘫痪。如果运行php 7+和对象缓存,处理“垃圾邮件”请求的cpu成本应该接近于零。因此,要么您应该升级服务器端以获得更好的gandle流量,要么您对试图利用其ajax处理程序的特定插件进行有针对性的攻击,在这种情况下,识别攻击目标应该是首要任务。虽然不太可能发生攻击,但更改日志以显示请求的有效负载仍然有意义。

SO网友:janh

恐怕没有什么灵丹妙药。如果你在阻止时过于小心,你就不会击中他们,如果你不够小心,你最终会阻止来自用户的合法请求。

您可以根据他们是否发送Origin 是否为页眉。浏览器通常会这样,机器人开发人员可能不会,因为他们通常不必这样做(而且作为一个自己写过几个机器人的人,至少我在编码时很懒)。

它们似乎使用HTTP/1.0,而浏览器通常使用1.1(及以上版本)。

他们是发送看起来像合法浏览器的用户代理,还是只发送“libwww perl/5.76”或类似的内容?

我可能会选择多标准阻塞机制。如果它看起来像一个合法的用户代理,但使用HTTP 1.0,并且不发送源标头,那么它可能是一个机器人。您可以更进一步,只有在他们提出一个可疑请求后才能阻止(例如,查看他们试图执行的操作)。

一个高级的想法是交叉引用“在启动AJAX请求之前,这个IP是否有一个常规的页面视图?”或者“该IP是否请求过图像或css/js文件?”,因为机器人很可能不会,除非他们真的想偷偷摸摸或者专门针对你的网站。如果您允许代理服务器缓存这些资源(CloudFlare将自动这样做),那么这可能会出现问题,但要将它们隔离起来可能需要付出太多的努力。

SO网友:majick

虽然没有可靠的方法来区分真正的AJAX调用和bot调用,但在这种情况下,您可以使用.htaccess

普通无参考块(如@janh2所示):

RewriteEngine on
RewriteCond %{HTTP_REFERER} ^-?$
RewriteRule ^wp-admin/admin-ajax.php - [F,L]
或者使用ModSecurity和自定义消息:

<Locationmatch "/wp-admin/admin-ajax.php">
SecRule REQUEST_METHOD "POST" "deny,status:401,id:972687,chain,msg:\'wp-admin ajax request blocked, no referrer\'"
SecRule &HTTP_REFERER "@eq 0"
</Locationmatch>
(来源:https://troyglancy.com/stopped-wordpress-brute-force-attacks-server/)

同样,如果您还没有遇到问题,那么您也不想做这件事,因为referer头很容易被欺骗,但它可能会对您或任何使用活动管理ajax的人产生影响。php攻击向量。

结束

相关推荐

AJAX管理员内部500错误无法上载

我有一个插件可以从wpdb获取用户信息。在对安全Wordpress 4.8.2进行了小规模更新后,插件运行不好。我的sellect按钮无法运行并将数据打开到表中。add_action(\'wp_ajax_get_batch_course_stats\',array($this,\'get_batch_course_stats\')); 如果我把这行放在类外,它会运行,但无法获取数据,因为我的查询在类内。这是我的密码。<?php if ( ! defined( \