WordPress新网站只要一上线,马上服务器会有大量的来尝试登录的访问 访问的都是主要2个链接wp-login.php和xmlrpc.php,因此会有严重的风险,黑客程序一天24小时不停的去尝试破解,每秒钟一次请求,严重浪费服务器资源。通过cloudflare免费的firewall可以轻松解决这个问题。
这里我教大家2个方式来设置。
通过cloudflare后台:
登录后台进入firewall rules 按照上图设置即可。
?http.request.uri.path contains "wp-login.php" or http.request.uri.path contains "xmlrpc.php"
这一句是核心代码,就是如果url包含这个2个就要求填验证码。
通过API设置
API直接使用python就可以,非常好简单。
def add_wordpress_firwall_rules(zone_id,email, auth_key):
import json
headers = {
'X-Auth-Email': email,
'X-Auth-Key': auth_key,
'Content-Type': 'application/json'
}
data = [{
"expression": "http.request.uri.path contains \"wp-login.php\" or http.request.uri.path contains \"xmlrpc.php\"",
"description": "wordpress login"
}]
url = 'https://api.cloudflare.com/client/v4/zones/%s/filters' % (zone_id)
print(data)
r = requests.post(url, headers=headers, data=json.dumps(data))
result = r.json()
print(result)
if result['success']:
items = result['result']
elif result['errors'][0]['code'] == 10102:
r = requests.get(url, headers=headers)
items = r.json()['result']
f_url = 'https://api.cloudflare.com/client/v4/zones/%s/firewall/rules'%(zone_id)
for item in items:
if item['description'] == 'wordpress login':
dd = [{
"filter": {
"id": item['id'],
},
'action': 'challenge',
'description': 'challenge login'
}]
fr = requests.post(url=f_url, headers=headers, data = json.dumps(dd))
return fr
else:
print(r.text)
填入账号email,authkey和zone id就可以了
|