如果要提高安全性并减少 WordPress网站上的漏洞 ,拥有一个配置良好的.htaccess文件至关重要。 通常,创建自定义.htaccess文件的主要目标是防止您的网站被黑客入侵,但这也是处理重定向和管理与缓存相关的任务的绝佳方法。
.htaccess是Apache Web服务器上使用的配置文件 。 大多数WordPress网站都在Apache服务器上运行 ,尽管一小部分由Nginx提供支持 。 在本文中,您可以找到.htaccess代码片段的集合 ,大部分可以用来保护您的网站,而其余代码则可以实现其他有用的功能。
在编辑.htaccess文件之前,请不要忘记备份它,以便在出现问题时始终可以返回到以前的版本 。
而且,如果您是不喜欢配置文件的人,我建议您使用BulletProof Security插件,它是市场上最可靠(也是最古老的) 免费.htaccess安全插件 。
创建默认的WP .htaccess
.htaccess基于每个目录工作 ,这意味着每个目录可以具有自己的.htaccess文件。 很容易发生,您的WordPress网站还没有.htaccess文件 。 如果您在根目录中找不到.htaccess文件,请创建一个空文本文件并将其命名为.htaccess
。
在下面,您可以找到WordPress使用的默认.htaccess文件 。 每当您需要此代码时,都可以在WordPress Codex中快速查找它。 请注意, WP Multisite有一个不同的.htaccess。
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
以#
开头的行是注释。 不要字里行间编辑任何 # BEGIN WordPress
和# END WordPress
。 在这些默认规则下添加自定义.htaccess 规则 。
您可以在本文中找到的所有代码段都移至根目录中的核心.htaccess文件 。
1.拒绝访问所有.htaccess文件
下面的代码拒绝访问您在WordPress中安装的所有.htaccess文件。 这样,您可以防止人们看到您的Web服务器配置 。
# Denies access to all .htaccess files
<Files ~ "^.*\.([Hh][Tt][Aa])">
Order Allow,Deny
Deny from all
Satisfy all
</Files>
2.保护您的WP配置
wp-config.php
文件包含所有WP配置 ,包括数据库登录名和密码。 您可以拒绝所有人访问,也可以授予管理员访问权限 。
如果选择后者,则# Allow from xx.xx.xx.xxx
行中的# Allow from xx.xx.xx.xxx
行的开头删除#
注释掉,然后插入管理员的IP地址代替xx.xx.xx.xxx
。
# Protects wp-config
<Files wp-config.php>
Order Allow,Deny
# Allow from xx.xx.xx.xxx
# Allow from yy.yy.yy.yyy
Deny from all
</Files>
3.防止XML-RPC DDoS攻击
WordPress默认情况下支持XML-RPC ,这是使远程发布成为可能的接口 。 但是,尽管它是一个很棒的功能,但它也是WP的最大安全漏洞之一,因为黑客可能会利用它进行DDoS攻击 。
如果您不想使用此功能,最好禁用它 。 和以前一样,您可以通过注释掉 # Allow from xx.xx.xx.xxx
行中的# Allow from xx.xx.xx.xxx
并添加管理员IP来添加例外 。
# Protects XML-RPC, prevents DDoS attack
<FilesMatch "^(xmlrpc\.php)">
Order Deny,Allow
# Allow from xx.xx.xx.xxx
# Allow from yy.yy.yy.yyy
Deny from all
</FilesMatch>
4.保护您的管理区域
通过仅向管理员授予访问权限来保护管理区域也是一个好主意。 在这里,请不要忘记添加至少一个“允许”例外,否则您将根本无法访问您的管理员。
# Protects admin area by IP
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "WordPress Admin Access Control"
AuthType Basic
<LIMIT GET>
Order Deny,Allow
Deny from all
Allow from xx.xx.xx.xxx
Allow from yy.yy.yy.yyy
</LIMIT>
5.防止目录列表
大多数WordPress网站不会禁用目录列表,这意味着任何人都可以浏览其文件夹和文件 ,包括媒体上载和插件文件。 不用说这是一个巨大的安全漏洞。
在下面,您可以看到典型的WordPress目录列表的样子 。
幸运的是,您只需要一行代码即可阻止此功能。 该代码段将向任何想要访问您的目录的人返回403错误消息 。
# Prevents directory listing
Options -Indexes
6.防止用户名枚举
如果启用了WP永久链接,则使用作者档案枚举用户名非常容易。 所显示的用户名(包括管理员的用户名)随后可用于蛮力攻击 。
将以下代码插入.htaccess文件中,以防止枚举用户名 。
# Prevents username enumeration
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]
7.阻止垃圾邮件发送者和机器人
有时您可能想限制来自某些IP地址的访问 。 此代码段提供了一种简单的方法来阻止您已经知道的垃圾邮件发送者和僵尸程序。
# Blocks spammers and bots
<Limit GET POST>
Order Allow,Deny
Deny from xx.xx.xx.xxx
Deny from yy.yy.yy.yyy
</Limit>
Allow from all
8.防止图像热链接
尽管不是安全威胁,但是图像热链接仍然是一件令人讨厌的事情。 人们不仅会在未经您许可的情况下使用您的图片 ,甚至会自己付费。 使用以下几行代码,您可以保护您的站点免受图像热链接。
# Prevents image hotlinking
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite2.com [NC]
RewriteRule \.(jpe?g?|png|gif|ico|pdf|flv|swf|gz)$ - [NC,F,L]
9.限制直接访问插件和主题PHP文件
如果有人直接调用您的插件和主题文件 ,这是很危险的,无论是偶然还是恶意攻击者。 此代码段来自Acunetix网站安全公司 ; 您可以在他们的博客文章中了解有关此漏洞的更多信息 。
# Restricts access to PHP files from plugin and theme directories
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]
10.设置永久重定向
您可以使用.htaccess轻松处理永久重定向 。 首先,您必须添加旧的URL ,然后遵循指向您要将用户重定向到的页面的新URL 。
# Permanent redirects
Redirect 301 /oldurl1/ http://yoursite.com/newurl1
Redirect 301 /oldurl2/ http://yoursite.com/newurl2
11.将访客发送到维护页面
我们在这里详细介绍了这种技术。 您需要单独的维护页面 (示例中为maintenance.html
)才能使此.htaccess规则起作用。 此代码使您的WordPress网站进入维护模式 。
# Redirects to maintenance page
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.html [R=503,L]
</IfModule>
12.限制所有对WP的访问,包括
/wp-includes/
文件夹包含 CMS工作所需的核心WordPress文件 。 没有内容,插件,主题或用户可能要在此处访问的任何其他内容。 因此,要加强安全性,最好限制所有对其的访问 。
# Blocks all wp-includes folders and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
13.阻止跨站点脚本(XSS)
以下代码段来自WP Mix ,它可保护您的站点免受某些常见的XSS攻击 ,即脚本注入以及尝试修改全局变量和请求变量的攻击 。
# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>
14.启用浏览器缓存
正如我之前提到的,.htaccess不仅出于安全性和重定向方面的考虑,而且还可以帮助您管理缓存 。 下面的代码段来自Elegant Themes ,它使访问者能够保存某些类型的文件 ,从而使浏览器缓存成为可能 ,因此,下次访问时,无需再次下载它们。
# Enables browser caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>
15.设置自定义错误页面
您可以使用.htaccess在WordPress网站上设置自定义错误页面。 为了使此方法起作用,您还需要创建自定义错误页面 (在示例中为custom-403.html
, custom-404.html
)并将其上传到您的根文件夹。
您可以为所需的任何HTTP错误状态代码 (4XX和5XX状态代码)设置自定义错误页面。
# Sets up custom error pages
ErrorDocument 403 /custom-403.html
ErrorDocument 404 /custom-404.html
翻译自: https://www.hongkiat.com/blog/useful-htaccess-snippets-for-wordpress/