如何使自己的WordPress足够牢固?多重奏开始。
一重奏,数据库安全
首先是数据库备份,虽然现在大多数服务器空间都有同步及异步备份,但为了防止意外情况的发生,定期将数据库本分到本地仍然是最保险的一种做法。在WP下可以借助WordPress Database Backup插件轻松实现,用户可以选择 WordPress Database Backup提供的备份周期(包括每小时、每天、每星期、每月等周期)进行资料备份。 备份过后即使数据库被破坏,我们也可以用备份资料来还原数据库。在启用之前别忘了确认你的服务器支持mail()函数可以往外发送邮件。
其次是修改默认SQL数据库前缀。如果你的WP还没有安装,那么在wp-config.php中修改语句”$table_prefix = ‘wp_’;”将”wp_”修改为你需要的前缀。如果已经安装过,首先备份数据库,然后到博客后台禁用全部插件,再到服务器后台的phpmyadmin中 修改所有数据库表前缀。
修改方法:根据WordPress的SQL数据库表名称逐条执行类似如下命令,将其中的”cfresh_”改为你需要的数据库表前缀:
想省事的话可以用WP Security Scan插件来修改。
数据库中表前缀修改完毕之后,返回wp-config.php文件,修改语句”$table_prefix = ‘wp_’;”,而后到WP后台恢复启用插件即可。
如果出现后台不能登录的情况,请到数据库中执行以下命令,将其中的”cfresh_”改为你需要的数据库表前缀:
二重奏,管理员账号安全
WP默认的管理员账号为admin,可以新建一个非admin为用户名的管理员账号而后删除admin账号,或者给admin账号重命名。同时使用高强度密码,这一点在WP中会有密码强度提示,参考即可。
三重奏,设置文件wp-config.php安全
1,修改自定义安全密钥(加密cookies),到https://api.wordpress.org/secret-key/1.1/生成随机安全密钥,替换默认密钥,防止入侵者通过cookie劫持访问后台管理界面。在wp-config.php中找到类似如下代码段,用打开页面中显示内容替换对应的8行”define”语句:
2,移动wp-config.php,从2.6版本开始,WordPress支持将设置文件放在安装文件的上一级目录中,如果在当前WordPress目
录下没有发现wp-config文件,WordPress会自动检查wp-config文件是否在其上层目录中。需要注意的是根据经验部分插件(如WP-
T-WAP)需要在安装目录读取wp-config.php文件,如果移动后出现不能正常使用的情况请及时移回。
3,锁定其他用户访问wp-config.php,可以在.htaccess文件中插入以下代码实现。
<files wp-config.php>
Order deny,allow
deny from all
</files>
四重奏,WordPress版本安全
首先自然是保持自己的程序版本最新,在后台多加关注新版本发布并加以操作即可。
然后是隐藏WordPress版本信息,以免入侵者找出对应漏洞发起攻击。
在WP2.5及更新版本中,在当前主题目录下的funtions.php中加入以下代码段实现:
五重奏,其他可以提高WP安全性的措施
删除不用的WordPress主题和插件;
为WordPress文件规定正确的文件许可权限;
限制搜索引擎对网站内容的索引范围。
-----------------------------------------------------------
如果你想知道自己的WP站点是否安全,请仔细检查以下几条:
1、打开浏览器,在地址栏中输入http://你的WordPress安装地址/wp-admin/images/ ,看看有什么效果?
解决方案:在这个目录下放入一个空白的index.html。同样也可以在其他你不想让别人看到的目录中放置index.html,例如wp-content目录。
2、打开浏览器,在地址栏中输入http://你的WordPress安装地址/wp-admin/ ,随意输入用户名和密码,看看你的博客允许你输错多少次?
解决方案:使用Login Lockdown插件-http://wordpress.org/extend/plugins/login-lockdown/。使用Login Lockdown插件在一定程度上阻止别人测试你的密码,如果探测到一个 IP 段在一时间段内登录失败的次数超过了某一数目,就会自动锁定其登录功能,并禁止此 IP 段的使用者登入系统。这个登录失败的次数和限制登录的时间间隔等,都可以在你的后台设置。
3、是不是任何人都可以打开你的WordPress后台登陆页面?
解决方案:
方法一:限制所有但除了自己的 IP (适用于静态IP用户)
如果你的是一个单一用户博客,你可能需要限制通过 IP 连接 WP‐ADMIN 的权限。请确保你所使用的是静态 IP。WP-ADMIN 中的 .HTACCESS 文件如下:
1 Order deny,allow
2 Allow from a.b.c.d #That’s your static IP
3 Please add some example for allowed ip ranges
4 Deny from all
保存文件,然后试图通过代理访问 wp-admin 目录,应该会被限制连接,然后使用自己的IP 再次连接。如果设置的一切正常,WP‐ADMIN 会被限制连接,除了通过你所设置的 IP。
方法二:需要密码 .htpasswd (推荐解决方案)
当然,推荐的选项是设置密码保护,这意味着你仍然可以在任何地方连接到 wp-admin 目录,但我们增加了一道防线,以防越权操作。
.htaccess 文件 WP‐ADMIN 中的 .HTACCESS 文件如下:
1 #this file should be outside your webroot.
2 AuthUserFile /srv/www/user1/.htpasswd
3 AuthType Basic
4 AuthName “Blog”
5 require user youruser #making this username difficult to guess can help mitigate password brute force attacks.
.htpasswd 文件 正如已经说明的,该文件可以放到网站目录之外的地方,上层目录是个很好的选择。
1 $ htpasswd ‐cm .htpasswd blog
2 New password:
3 Re‐type new password:
4 Adding password for user blog
.htpasswd 文件已经在当前目录中创建了,请确保本文件的地址符合 wp‐admin/.htaccess 中 AuthUserFile 所设置的地址。
现在测试一下看看是否已经工作了。当你试图登录博客时会要求你输入用户名和密码以获得连接权限。如果没有出现的话,查看一下加密密码文件,然后查看所提供的地址是否正确。
4、WordPress后台 – 用户,你的用户列表中是否包括 admin ?
解决方案:你应该把默认的管理员用户名删除或者从 admin 修改为一个更难被猜到的名字,因为现行的 WordPress 版本都很容易因为用户枚举而被攻击。这样做可以缓和暴力破解密码的攻击。注意:你应该假设袭击者会知道你的用户名,所以确保密码足够的复杂。
5、在你博客前台的某个地方是否可以找到你的WordPress后台的登录用户名?
解决方案:WordPress 中有一个很好的方法,就是可以隐藏你的登录名。在“用户”设置中,你可以把你的“对外显示为”更改为你的昵称,这样在你发布文章的时候,给访客回复的时候,显示的就是你的昵称,而不是你的后台登录名。
6、WordPress根目录 wp-config.php 中,以下内容代码中的**部分是否已经包含安全码,或者仍是默认的提示语句(put your unique phrase here)?
1 define('AUTH_KEY', '**');
2 define('SECURE_AUTH_KEY', '**');
3 define('LOGGED_IN_KEY', '**');
4 define('NONCE_KEY', '**');
解决方案:使用WordPress.org 私钥生成服务(https://api.wordpress.org/secret-key/1.1/salt/),生成安全码。
7、你的博客是否经常备份,以确保出现意外能够第一时间恢复?
解决方案:使用WordPress Database Backup插件可以很方便的备份你的博客数据库,并定时自动发送到你的邮箱,这样可以防止网站服务器挂了,备份也没了。切记,切勿把备份文件放到服务器!
8、是不是通过查看页面源代码就能够知道你的博客使用了哪些插件?
解决方案:这个要去修改代码源文件,比较麻烦,难度较大。
9、是不是通过查看页面源代码就能知道你使用的WordPress版本?
解决方案:很多的袭击者或自动程序会在实施攻击以前试图获取软件的版本,去除 WordPress 的版本信息可以使某些基于特定版本进行袭击的袭击者们失去信心。BlogSecurity WordPress Noversion 插件 (bs‐wp‐noversion) 可以防止 WordPress 版本漏洞,是一个简单但超级实用的插件。
注意:该插件可能对那些依赖于 WordPress 版本信息的插件产生影响。
10、你是否给你的博客空间配置了监控,以确保你的博客挂掉了,你也能第一时间获得通知?
解决方案:你可以使用第三方的博客监控服务。你可以自己使用PHP轻松监控你的网站运行状态,具体参考这里。
11、你的WordPress和插件是否都是最新版?
解决方案:如果你的博客程序或插件是直接从开发者的站点获得的,那么你可能已经使用了最新版本,你可以安装 WordPress Plugin Tracker 插件来跟踪插件,查看是否使用了最新版本。安装并激活插件之后,运行该插件查看你是否正在使用最新的插件.
如果插件的版本过时了,你会被该插件提醒,点击左边的插件标题就会直接转到对应的插件页面,然后选择是否升级。很简单的保持插件最新的方法.
一重奏,数据库安全
首先是数据库备份,虽然现在大多数服务器空间都有同步及异步备份,但为了防止意外情况的发生,定期将数据库本分到本地仍然是最保险的一种做法。在WP下可以借助WordPress Database Backup插件轻松实现,用户可以选择 WordPress Database Backup提供的备份周期(包括每小时、每天、每星期、每月等周期)进行资料备份。 备份过后即使数据库被破坏,我们也可以用备份资料来还原数据库。在启用之前别忘了确认你的服务器支持mail()函数可以往外发送邮件。
其次是修改默认SQL数据库前缀。如果你的WP还没有安装,那么在wp-config.php中修改语句”$table_prefix = ‘wp_’;”将”wp_”修改为你需要的前缀。如果已经安装过,首先备份数据库,然后到博客后台禁用全部插件,再到服务器后台的phpmyadmin中 修改所有数据库表前缀。
修改方法:根据WordPress的SQL数据库表名称逐条执行类似如下命令,将其中的”cfresh_”改为你需要的数据库表前缀:
- ALTER TABLE wp_commentmeta RENAME TO cfresh_commentmeta
- ALTER TABLE wp_comments RENAME TO cfresh_comments
- ALTER TABLE wp_links RENAME TO cfresh_links
…….
数据库中表前缀修改完毕之后,返回wp-config.php文件,修改语句”$table_prefix = ‘wp_’;”,而后到WP后台恢复启用插件即可。
如果出现后台不能登录的情况,请到数据库中执行以下命令,将其中的”cfresh_”改为你需要的数据库表前缀:
- UPDATE newprefix_options SET option_name = REPLACE(option_name,’wp_user_roles’,'cfresh_user_roles’);
- UPDATE newprefix_usermeta SET meta_key = REPLACE(meta_key,’wp_’,'cfresh_’);
二重奏,管理员账号安全
WP默认的管理员账号为admin,可以新建一个非admin为用户名的管理员账号而后删除admin账号,或者给admin账号重命名。同时使用高强度密码,这一点在WP中会有密码强度提示,参考即可。
三重奏,设置文件wp-config.php安全
1,修改自定义安全密钥(加密cookies),到https://api.wordpress.org/secret-key/1.1/生成随机安全密钥,替换默认密钥,防止入侵者通过cookie劫持访问后台管理界面。在wp-config.php中找到类似如下代码段,用打开页面中显示内容替换对应的8行”define”语句:
- /**#@+
- * 身份密匙设定。
- *
- * 您可以随意写一些字符
- * 或者直接访问 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私钥生成服务},
- * 任何修改都会导致 cookie 失效,所有用户必须重新登录。
- *
- * @since 2.6.0
- */
- define(‘AUTH_KEY’, ’put your unique phrase here’);
- define(‘SECURE_AUTH_KEY’, ’put your unique phrase here’);
- define(‘LOGGED_IN_KEY’, ’put your unique phrase here’);
- define(‘NONCE_KEY’, ’put your unique phrase here’);
- define(‘AUTH_SALT’, ’put your unique phrase here’);
- define(‘SECURE_AUTH_SALT’, ’put your unique phrase here’);
- define(‘LOGGED_IN_SALT’, ’put your unique phrase here’);
- define(‘NONCE_SALT’, ’put your unique phrase here’);
3,锁定其他用户访问wp-config.php,可以在.htaccess文件中插入以下代码实现。
<files wp-config.php>
Order deny,allow
deny from all
</files>
四重奏,WordPress版本安全
首先自然是保持自己的程序版本最新,在后台多加关注新版本发布并加以操作即可。
然后是隐藏WordPress版本信息,以免入侵者找出对应漏洞发起攻击。
在WP2.5及更新版本中,在当前主题目录下的funtions.php中加入以下代码段实现:
- function wpbeginner_remove_version() {
- return ”;
- }
- add_filter(‘the_generator’, ’wpbeginner_remove_version’);
五重奏,其他可以提高WP安全性的措施
删除不用的WordPress主题和插件;
为WordPress文件规定正确的文件许可权限;
限制搜索引擎对网站内容的索引范围。
-----------------------------------------------------------
如果你想知道自己的WP站点是否安全,请仔细检查以下几条:
1、打开浏览器,在地址栏中输入http://你的WordPress安装地址/wp-admin/images/ ,看看有什么效果?
解决方案:在这个目录下放入一个空白的index.html。同样也可以在其他你不想让别人看到的目录中放置index.html,例如wp-content目录。
2、打开浏览器,在地址栏中输入http://你的WordPress安装地址/wp-admin/ ,随意输入用户名和密码,看看你的博客允许你输错多少次?
解决方案:使用Login Lockdown插件-http://wordpress.org/extend/plugins/login-lockdown/。使用Login Lockdown插件在一定程度上阻止别人测试你的密码,如果探测到一个 IP 段在一时间段内登录失败的次数超过了某一数目,就会自动锁定其登录功能,并禁止此 IP 段的使用者登入系统。这个登录失败的次数和限制登录的时间间隔等,都可以在你的后台设置。
3、是不是任何人都可以打开你的WordPress后台登陆页面?
解决方案:
方法一:限制所有但除了自己的 IP (适用于静态IP用户)
如果你的是一个单一用户博客,你可能需要限制通过 IP 连接 WP‐ADMIN 的权限。请确保你所使用的是静态 IP。WP-ADMIN 中的 .HTACCESS 文件如下:
1 Order deny,allow
2 Allow from a.b.c.d #That’s your static IP
3 Please add some example for allowed ip ranges
4 Deny from all
保存文件,然后试图通过代理访问 wp-admin 目录,应该会被限制连接,然后使用自己的IP 再次连接。如果设置的一切正常,WP‐ADMIN 会被限制连接,除了通过你所设置的 IP。
方法二:需要密码 .htpasswd (推荐解决方案)
当然,推荐的选项是设置密码保护,这意味着你仍然可以在任何地方连接到 wp-admin 目录,但我们增加了一道防线,以防越权操作。
.htaccess 文件 WP‐ADMIN 中的 .HTACCESS 文件如下:
1 #this file should be outside your webroot.
2 AuthUserFile /srv/www/user1/.htpasswd
3 AuthType Basic
4 AuthName “Blog”
5 require user youruser #making this username difficult to guess can help mitigate password brute force attacks.
.htpasswd 文件 正如已经说明的,该文件可以放到网站目录之外的地方,上层目录是个很好的选择。
1 $ htpasswd ‐cm .htpasswd blog
2 New password:
3 Re‐type new password:
4 Adding password for user blog
.htpasswd 文件已经在当前目录中创建了,请确保本文件的地址符合 wp‐admin/.htaccess 中 AuthUserFile 所设置的地址。
现在测试一下看看是否已经工作了。当你试图登录博客时会要求你输入用户名和密码以获得连接权限。如果没有出现的话,查看一下加密密码文件,然后查看所提供的地址是否正确。
4、WordPress后台 – 用户,你的用户列表中是否包括 admin ?
解决方案:你应该把默认的管理员用户名删除或者从 admin 修改为一个更难被猜到的名字,因为现行的 WordPress 版本都很容易因为用户枚举而被攻击。这样做可以缓和暴力破解密码的攻击。注意:你应该假设袭击者会知道你的用户名,所以确保密码足够的复杂。
5、在你博客前台的某个地方是否可以找到你的WordPress后台的登录用户名?
解决方案:WordPress 中有一个很好的方法,就是可以隐藏你的登录名。在“用户”设置中,你可以把你的“对外显示为”更改为你的昵称,这样在你发布文章的时候,给访客回复的时候,显示的就是你的昵称,而不是你的后台登录名。
6、WordPress根目录 wp-config.php 中,以下内容代码中的**部分是否已经包含安全码,或者仍是默认的提示语句(put your unique phrase here)?
1 define('AUTH_KEY', '**');
2 define('SECURE_AUTH_KEY', '**');
3 define('LOGGED_IN_KEY', '**');
4 define('NONCE_KEY', '**');
解决方案:使用WordPress.org 私钥生成服务(https://api.wordpress.org/secret-key/1.1/salt/),生成安全码。
7、你的博客是否经常备份,以确保出现意外能够第一时间恢复?
解决方案:使用WordPress Database Backup插件可以很方便的备份你的博客数据库,并定时自动发送到你的邮箱,这样可以防止网站服务器挂了,备份也没了。切记,切勿把备份文件放到服务器!
8、是不是通过查看页面源代码就能够知道你的博客使用了哪些插件?
解决方案:这个要去修改代码源文件,比较麻烦,难度较大。
9、是不是通过查看页面源代码就能知道你使用的WordPress版本?
解决方案:很多的袭击者或自动程序会在实施攻击以前试图获取软件的版本,去除 WordPress 的版本信息可以使某些基于特定版本进行袭击的袭击者们失去信心。BlogSecurity WordPress Noversion 插件 (bs‐wp‐noversion) 可以防止 WordPress 版本漏洞,是一个简单但超级实用的插件。
注意:该插件可能对那些依赖于 WordPress 版本信息的插件产生影响。
10、你是否给你的博客空间配置了监控,以确保你的博客挂掉了,你也能第一时间获得通知?
解决方案:你可以使用第三方的博客监控服务。你可以自己使用PHP轻松监控你的网站运行状态,具体参考这里。
11、你的WordPress和插件是否都是最新版?
解决方案:如果你的博客程序或插件是直接从开发者的站点获得的,那么你可能已经使用了最新版本,你可以安装 WordPress Plugin Tracker 插件来跟踪插件,查看是否使用了最新版本。安装并激活插件之后,运行该插件查看你是否正在使用最新的插件.
如果插件的版本过时了,你会被该插件提醒,点击左边的插件标题就会直接转到对应的插件页面,然后选择是否升级。很简单的保持插件最新的方法.