Total Pageviews

Wednesday, 4 September 2013

WordPress安全多重奏

如何使自己的WordPress足够牢固?多重奏开始。
        一重奏,数据库安全
        首先是数据库备份,虽然现在大多数服务器空间都有同步及异步备份,但为了防止意外情况的发生,定期将数据库本分到本地仍然是最保险的一种做法。在WP下可以借助WordPress Database Backup插件轻松实现,用户可以选择 WordPress Database Backup提供的备份周期(包括每小时、每天、每星期、每月等周期)进行资料备份。 备份过后即使数据库被破坏,我们也可以用备份资料来还原数据库。在启用之前别忘了确认你的服务器支持mail()函数可以往外发送邮件。
        其次是修改默认SQL数据库前缀。如果你的WP还没有安装,那么在wp-config.php中修改语句”$table_prefix = ‘wp_’;”将”wp_”修改为你需要的前缀。如果已经安装过,首先备份数据库,然后到博客后台禁用全部插件,再到服务器后台的phpmyadmin中 修改所有数据库表前缀。
        修改方法:根据WordPress的SQL数据库表名称逐条执行类似如下命令,将其中的”cfresh_”改为你需要的数据库表前缀:
  1. ALTER TABLE wp_commentmeta RENAME TO cfresh_commentmeta   
  2. ALTER TABLE wp_comments RENAME TO cfresh_comments   
  3. ALTER TABLE wp_links RENAME TO cfresh_links
    …….  
        想省事的话可以用WP Security Scan插件来修改。
        数据库中表前缀修改完毕之后,返回wp-config.php文件,修改语句”$table_prefix = ‘wp_’;”,而后到WP后台恢复启用插件即可。
        如果出现后台不能登录的情况,请到数据库中执行以下命令,将其中的”cfresh_”改为你需要的数据库表前缀:

  1. UPDATE newprefix_options SET option_name = REPLACE(option_name,’wp_user_roles’,'cfresh_user_roles’);   
  2.  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”语句:
  1. /**#@+  
  2.  * 身份密匙设定。  
  3.  *  
  4.  * 您可以随意写一些字符  
  5.  * 或者直接访问 {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org 私钥生成服务},  
  6.  * 任何修改都会导致 cookie 失效,所有用户必须重新登录。  
  7.  *  
  8.  * @since 2.6.0  
  9.  */  
  10. define(‘AUTH_KEY’,         ’put your unique phrase here’);   
  11. define(‘SECURE_AUTH_KEY’,  ’put your unique phrase here’);   
  12. define(‘LOGGED_IN_KEY’,    ’put your unique phrase here’);   
  13. define(‘NONCE_KEY’,        ’put your unique phrase here’);   
  14. define(‘AUTH_SALT’,        ’put your unique phrase here’);   
  15. define(‘SECURE_AUTH_SALT’, ’put your unique phrase here’);   
  16. define(‘LOGGED_IN_SALT’,   ’put your unique phrase here’);   
  17. define(‘NONCE_SALT’,       ’put your unique phrase here’);  
        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中加入以下代码段实现:
  1. function wpbeginner_remove_version() {   
  2.  return ;   
  3. }   
  4. 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 插件来跟踪插件,查看是否使用了最新版本。安装并激活插件之后,运行该插件查看你是否正在使用最新的插件.
如果插件的版本过时了,你会被该插件提醒,点击左边的插件标题就会直接转到对应的插件页面,然后选择是否升级。很简单的保持插件最新的方法.