加强 WordPress 安全性的 10 个 Nginx 规则
迄今为止,WordPress 是最受欢迎的 CMS,拥有超过 30% 的网络市场份额。凭借如此大的市场份额,WordPress 经常成为安全威胁的目标。因此,对于 WordPress 网站所有者而言,最好采取一些措施来加强您网站的安全性。
由于成千上万的网站在 Nginx 上运行,我收集了一些基本技巧或 Nginx规则来加强您的 WordPress 网站安全。让我们来看看。
另请阅读: 加强 WordPress 安全性的 10 个技巧
1.限制XMLRPC访问
WordPress 中的 XMLRPC 端点用于允许外部应用程序与 WordPress 数据进行交互。例如,它可以允许添加、创建或删除帖子。但是,XMLRPC 也是一种常见的攻击媒介,攻击者可以在未经授权的情况下执行这些操作。最好允许从您信任的授权 IP 向 XMLRPC 发出请求,如下所示:
1个
2个
3个
4个
|
location ~* /xmlrpc.php$ { allow 172.0.1.1; deny all; } |
添加上述内容后,您应该会在浏览器中加载时看到403 错误代码响应。xmlrpc.php
2. 限制请求类型
大多数时候,您的网站可能只执行两种类型的请求,即从您的网站检索数据和将数据上传到您的网站。将我们的网站可以处理的请求类型限制为仅这两种听起来是个好主意。 GET
POST
1个
2个
3个
|
if ( $request_method !~ ^(GET|POST)$ ) { return 444; } |
3.直接访问PHP文件
如果不知何故,黑客成功地将 PHP 文件潜入您的网站,他们将能够通过加载文件来运行该文件,这实际上成为渗透您网站的后门。我们应该通过添加以下规则来禁用对任何 PHP 文件的直接访问:
1个
2个
3个
4个
5个
|
location ~* /(?:uploads|files|wp-content|wp-includes|akismet)/.*.php$ { deny all; access_log off; log_not_found off; } |
4.点文件
与 PHP 文件类似,像.htaccess
,.user.ini
和 之类的点文件.git
可能包含敏感信息。为了安全起见,最好禁用对这些文件的直接访问。
1个
2个
3个
4个
5个
6个
7
8个
9
10
11
12
13
14
15
|
location ~ /\.(svn|git)/* { deny all; access_log off; log_not_found off; } location ~ /\.ht { deny all; access_log off; log_not_found off; } location ~ /\.user.ini { deny all; access_log off; log_not_found off; } |
5.隐藏Nginx和PHP版本
某些信息最好不要暴露,比如 Nginx 版本和 PHP 版本。这不会阻止攻击本身。然而,假设特定的 Ningx 或 PHP 版本被证明存在漏洞,攻击者将不会轻易从您的站点获知。隐藏 Nginx 版本:
1个
2个
|
#Hide the nginx version. server_tokens off; |
1个
2个
3个
|
#Hide the PHP version. fastcgi_hide_header X-Powered-By; proxy_hide_header X-Powered-By; |
6. 安全标头
安全标头通过指示浏览器行为提供额外的安全层。例如X-Frame-Options
,将阻止您的站点从 iframe 加载,除非它来自您自己的站点。将Strict-Transport-Security
强制浏览器从 HTTPS 加载您的网站。
1个
2个
3个
4个
|
add_header X-Frame-Options SAMEORIGIN; add_header Strict-Transport-Security "max-age=31536000" ; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block" ; |
7. 阻止子目录访问
如果您的站点运行在类似 的子目录上/blog
,最好允许访问该子目录。例如,这意味着对攻击者一直寻找的其他目录的任何模糊访问/82jdkj/?.php
都会被阻止。
1个
2个
3个
4个
5个
|
location ~ ^/(?!(blog)/?) { deny all; access_log off; log_not_found off; } |
8.减少垃圾邮件
垃圾评论,虽然它可能不会破坏您的网站,但它会用垃圾内容或可能用作媒介的恶意内容淹没您的数据库。为了减少垃圾邮件条目,您可以将以下规则与垃圾邮件保护插件(如Akismet)一起添加到您的 Nginx 配置中。
1个
2个
3个
4个
5个
6个
7
8个
9
10
11
12
13
14
15
16
17
18
19
20
21
|
set $comment_flagged 0; set $comment_request_method 0; set $comment_request_uri 0; set $comment_referrer 1; if ( $request_method ~ "POST" ){ set $comment_request_method 1; } if ( $request_uri ~ "/wp-comments-post\.php$" ){ set $comment_request_method 1; } if ( $http_referer !~ "^https?://(([^/]+\.)?site\.com|jetpack\.wordpress\.com/jetpack-comment)(/|$)" ){ set $comment_referrer 0; } set $comment_flagged "${comment_request_method}${comment_request_uri}${comment_referrer}" ; if ( $comment_flagged = "111" ) { return 403; } |
9.限制请求
WordPress 登录页面wp-login.php
是暴力攻击的常见端点。攻击者将尝试通过提交多个用户名和密码组合来突破您的站点,这通常会在一秒钟内完成多次。
为此,我们可以应用一个规则来限制页面每秒可以处理的请求数。这里我们设置了每秒2个请求的限制,否则请求会被阻塞。
1个
2个
3个
4个
|
limit_req_zone $binary_remote_addr zone=WPRATELIMIT:10m rate=2r/s; location ~ \wp-login.php$ { limit_req zone=WPRATELIMIT; } |
10.禁用目录列表
最后但同样重要的是,您应该禁用目录列表,这样攻击者就不知道目录中有什么。我几乎没有理由知道目录列表在 WordPress 网站上的哪些地方有用。
1个
|
autoindex off; |