月度归档:2014年03月

WordPress3.8.1红色警报xmlrpc.php拒绝服务漏洞

WordPress 3.8.1 /xmlrpc.php 文件有ping其他主机的功能,通过这个功能可以请求多个站点,DDOS攻击别的网站。

1. WordPress Pingback 漏洞的发现

早在2012 年 12 月 17 日一些采用 PHP 的知名博客程序 WordPress被曝光存在严重的漏洞,该漏洞覆盖WordPress 全部已发布的版本(包括WordPress 3.8.1)。该漏洞的 WordPress 扫描工具也在很多论坛和网站发布出来。工具可以利用 WordPress 漏洞来进行扫描,也可以发起DDoS 攻击。经过测试,漏洞影响存在 xmlrpc.php 文件的全部版本。

2. 漏洞的利用原理

Pingback 是三种类型的反向链接中的一种,当有人链接或者盗用作者文章时来通知作者的一种方法。可以让作者了解和跟踪文章被链接或被转载的情况。一些全球最受欢迎的 blog 系统比如 Movable Type、Serendipity、WordPress 和 Telligent Community 等等,都支持 Pingback 功能,使得可以当自己的文章被转载发布的时候能够得到通知。 WordPress 中有一个可以通过 xmlrpc.php 文件接入的 XMLRPC API,可以使用 pingback.ping 的方法加以利用。 其他 BLOG 网站向 WordPress 网站发出 pingback,当WordPress处理 pingback 时,会尝试解析源 URL。如果解析成功,将会向该源 URL 发送一个请求,并检查响应包中是否有本 WordPress 文章的链接。如果找到了这样一个链接,将在这个博客上发一个评论,告诉大家原始文章在自己的博客上。 黑客向使用WordPress论坛的网站发送数据包,带有被攻击目标的 URL(源 URL)。WordPress 论坛网站收到数据包后,通过 xmlrpc.php 文件调用 XMLRPC API,向被攻击目标 URL 发起验证请求。如果发出大量的请求,就会对目标 URL 形成 HTTP Flood。当然,单纯向 WordPress 论坛网站发出大量的请求,也会导致 WordPress 网站自身被攻瘫。 除了 DDoS 之外,黑客可以通过源 URL 主机存在与否将返回不同的错误信息这个线索,如果这些主机在内网中确实存在,攻击者可以进行内网主机扫描。

利用wordpress XMLRPC攻击的示例:

$ curl -D -  "www.abc.com/xmlrpc.php" -d '<methodCall><methodName>pingback.ping</methodName><params><param><value><string>http://www.baidu.com</string></value></param><param><value><string>www.bac.com/postchosen</string></value></param></params></methodCall>'

预防方法:删除xmlrpc.php文件或者禁止对xmlrpc.php文件的访问。

wordpress非插件实现生成静态缓存文件,提速效率高达100%

在大量文章、评论以及插件的数据的情况下wordpress速度的确不敢恭维,之前小C曾经介绍过一款非常实用wordpress插件:WP Super Cache,该插件对wordpress有着非常明显的加速优化效果,该插件的Mod_rewrite加速模式加速效果非常好,因为这种模式是直接将网站的页面生成静态的html页面,然后使用Mod_rewrite将请求转发到静态文件,这样就跳过了php解析这一步直接将页面吐出到浏览器,从而达到加速的效果。今天小V就教大家不使用插件来静态化缓存wordpress。

<?php 
define('CACHE_ROOT', dirname(__FILE__).'/cache'); 
define('CACHE_LIFE', 86400);                   //缓存文件的生命期,单位秒,86400秒是一天 
define('CACHE_SUFFIX','.html');             //缓存文件的扩展名,千万别用 .php .asp .jsp .pl 等等 
      
$file_name  = md5($_SERVER['REQUEST_URI']).CACHE_SUFFIX;    //缓存文件名 
      
//缓存目录,根据md5的前两位把缓存文件分散开。避免文件过多。如果有必要,可以用第三四位为名,再加一层目录。 
//256个目录每个目录1000个文件的话,就是25万个页面。两层目录的话就是65536*1000=六千五百万。 
//不要让单个目录多于1000,以免影响性能。 
      
$cache_dir  = CACHE_ROOT.'/'.substr($file_name,0,2); 
$cache_file = $cache_dir.'/'.$file_name;    //缓存文件存放路径 
      
if($_SERVER['REQUEST_METHOD']=='GET'){      //GET方式请求才缓存,POST之后一般都希望看到最新的结果 
    if(file_exists($cache_file) && time() - filemtime($cache_file) < CACHE_LIFE){   //如果缓存文件存在,并且没有过期,就把它读出来。 
        $fp = fopen($cache_file,'rb'); 
        fpassthru($fp); 
        fclose($fp); 
        exit(); 
    } 
    elseif(!file_exists($cache_dir)){ 
        if(!file_exists(CACHE_ROOT)){ 
            mkdir(CACHE_ROOT,0777); 
            chmod(CACHE_ROOT,0777); 
        } 
        mkdir($cache_dir,0777); 
        chmod($cache_dir,0777); 
    } 
      
    function auto_cache($contents){         //回调函数,当程序结束时自动调用此函数 
        global $cache_file; 
        $fp = fopen($cache_file,'wb'); 
        fwrite($fp,$contents); 
        fclose($fp); 
        chmod($cache_file,0777); 
        clean_old_cache();                  //生成新缓存的同时,自动删除所有的老缓存。以节约空间。 
        return $contents; 
    } 
      
    function clean_old_cache(){ 
        chdir(CACHE_ROOT); 
        foreach (glob("*/*".CACHE_SUFFIX) as $file){ 
           if(time()-filemtime($file)>CACHE_LIFE){ 
               unlink($file); 
           } 
        } 
    } 
          
    ob_start('auto_cache');                 //回调函数 auto_cache 
} 
else{ 
    if(file_exists($cache_file)){           //file_exists() 函数检查文件或目录是否存在。 
        unlink($cache_file);                //不是GET的请求就删除缓存文件。 
    } 
} 
?>

将以上代码保存为cache.php文件然后放置到网站根目录,然后在根目录下目录下一个名为cache的目录,权限更改为777(写入缓存文件用的)

然后在根目录的index.php的<?php之后加上以下代码:

require('cache.php');

一定要保证缓存目录的可写性,一定要加到文件的最上方,不然等页面完全加载完了才吐出缓存页面那就等于没缓存一样。

相关教程:对wordpress非插件生成html静态缓存教程的补充

wordpress个性化登录页面插件:Branded Login Screen汉化版

英文名:branded-login-screen目前已经更新到3.2版本,这次将3.2版本进行了汉化,修改了背景图片,并修改登录界面默认居中(原插件是右对齐),当然可以根据自己喜好修改。

插件功能:

*全屏幕背景图像

*使用自己的标题图片在WordPress的LOGO位置*位置登录表单:左对齐,居中或右/上,中

*登录表单响应小屏幕

* SCROLLING本,如果超出视口*背景图片大小随窗口调整大小

*支持重复背景图像*删除所有WordPress的商标标识*静止升级预览插件安装:下载branded-login-screen3.2.zip后解压到网站wp-content/plugins/目录,然后进行激活即可使用。

使用说明:

替换背景图:

先将插件包解压,然后找到branded-login-screen ->> assets ->> i ->> background_image ->> default-img.jpg
default-img.jpg这是背景图片,改成同样的名字覆盖替换,如果不替换则保持默认。

替换logo:

与替换背景图差不多,找到branded-login-screen ->> assets ->> i ->> logo_main ->>header.png
header.png就是logo的图片,将你的网站logo改成同样的名字然后覆盖替换。

修改登录界面位置:

找到branded-login-screen.php第48行(’ BLS_LOCATION ‘,0) ;更改该值与您想要的位置,以协调的登录表单。已经修改默认为居中,如果不合适按照以下修改。
* 0 – 中东中心
* 1 – 中间偏左
* 2 – 中 – 右
* 3 – 顶部中心
* 4 – 左上
* 5 – 右上

wordpress插件截图:

wordpress个性化登录页面插件:Branded Login Screen汉化版-wordpress插件-代码笔记

原文:http://www.zouxiuping.com/archives/2131

WordPress百度结构化数据提交插件,妈妈再也不用担心网站收录了

WordPress百度结构化数据提交插件,妈妈再也不用担心网站收录了-wordpress插件-代码笔记

之前百度站长平台推出了disucz结构化数据插件帮助disucz站长向百度提交数据,达到增加网站,以及排名的效果,最近百度又推出了WordPress结构化数据插件,帮助WordPress站长想向百度提交数据。没有sitemap权限?不知道怎么提交sitmap数据?结构化数据插件帮你搞定。遍历网站URL数据,自动生成sitemap提交到百度。优质内容不够醒目?应用结构化摘要优化展现,提升结果点击率,流量节节攀升不是梦。安装结构化数据插件,能又快又全的向百度提交论坛网页及内容。帮助百度Spider更好的了解您的网站,帮助收录,对于优质的数据资源,可应用结构化摘要样式优化网站在百度搜索结果页的展现。根据社区论坛软件系统的不同,结构化插件分为:Discuz! 结构化数据插件和WordPress 结构化数据插件,二者的功能基本一致。

wordpress禁用RSS Feed防止rss采集

现在通过RSS feed来订阅网站内容的小伙伴越来越少了,而且很多垃圾网站可以通过RSS feed来快速复制你网站的内容。其实v7v3之前就被某渣渣站长通过rss采集了不少内容,不过现在已经采用手段防止了,其实之前v7v3曾经关闭过一段时间RSS feed,但是由于某几个小伙伴强烈要求要订阅v7v3,所以小V就采取了别的措施,不过如果你的网站没人订阅,那么就可以通过禁用RSS feed来防止网站被采集,方法其实很简单在当前使用的wordpress主题的functions.php文件中加入以下代码即可关闭RSS feed:

function v7v3_disable_feed() {
wp_die(__('<h1>本博客不再提供 Feed,请访问网站<a href="'.get_bloginfo('url').'">首页</a>!</h1>'));
}
add_action('do_feed', 'v7v3_disable_feed', 1);
add_action('do_feed_rdf', 'v7v3_disable_feed', 1);
add_action('do_feed_rss', 'v7v3_disable_feed', 1);
add_action('do_feed_rss2', 'v7v3_disable_feed', 1);
add_action('do_feed_atom', 'v7v3_disable_feed', 1);

wordpress教程(初阶四):后台发布文章

今天小V继续出wordpress新手建站教程系列的第四期教程,如何通过后台发布文章。首先我们登录到wordpress后台,进入到wordpress网站后我们可以看到仪表盘界面,将鼠标移动到文章菜单上,当鼠标移动到文章菜单后wordpress会自动弹出一个子菜单其中有个写文章的选项我们点击去就可进入wordpress的文章编辑器了,如下图:

wordpress教程(初阶四):后台发布文章-wordpress新手教程-代码笔记 %

进入到文章编辑器后我们可以看到编辑器主体有这么些选项,如下图:

wordpress教程(初阶四):后台发布文章-wordpress新手教程-代码笔记 %

图中用箭头标出来的一个是文章标题,一个是文章编辑模式,这里我们要注意的是编辑器分两种模式,一种是可视化编辑模式,一种是文本编辑模式,可视化模式就是类似与编辑word文档一样的所见即所得编辑模式,而文本编辑模式则是代码编辑模式。一般情况下我们都使用可视化编辑模式来撰写文章,至于哪个部分填标题哪个部分填正文相信大家一看就知道了,在这就不做过多的解释了。

再来说说文章的发布状态以及文章的访问权限控制:

wordpress教程(初阶四):后台发布文章-wordpress新手教程-代码笔记 %

从上图我们可以很直观的看出每个按钮的作用,不过在这里小V还是给新手再解释下各个按钮的作用以及用法,首先是保存草稿,点击保存草稿后文章将以草稿形式保存在网站里,并不会在网站前台发布出来。预览按钮的作用则是让站长在编辑文章后不用发布就可以直接看到文章发布后的效果。

第二行的状态点击后可以将文章状态修改为待审核和草稿两个状态,公开度则可以将文章设为首页置顶文章、私密以及密码保护这三种状态。首页置顶这个不做过多说明,私密状态则是在站长登录后自己才能看到的文章,密码保护文章则是输入站长事先设置好的密码后才能看到的文章。

wordpress教程(初阶四):后台发布文章-wordpress新手教程-代码笔记 %

上图是编辑文章时选择文章所在分类的选项,一篇文章可以同时选择多个分类,点击底下的添加新分类则是进入到添加新分类的页面,添加标签的选项栏,这个没什么好多解释的,只要注意多个标签用英文逗号分隔即可。

WordPress支付宝Alipay|财付通Tenpay|贝宝PayPal集成插件

WordPress支付宝Alipay|财付通Tenpay|贝宝PayPal集成插件-wordpress插件-代码笔记 %

话说最近很多小伙伴都想利用wordpress做一个电商网站来出售自己的商品,今天小V就为大家介绍一款集成多种支付网关的wordpress插件:WordPress支付宝Alipay|财付通Tenpay|贝宝PayPal集成插件,该插件集成了支付宝Alipay接口,财付通Tenpay接口,以及贝宝PayPal的支付接口,这些支付网关都是国内网民常用的,所以非常适合用来建立面向国内用户的电商网站,并且该wordpress插件是免费的~。

功能特性:

【多接口支持】完美支持国内通用的支付宝,财付通以及国际通用的Paypal接口和20余家直联网银!

【后台统一管理】目前在后台支持商品管理,订单管理,模版管理,统一管理,功能分离,方便直观!

【短代码快捷添加】只需要在文章中输入[zfb id=123]字样的短代码就可以快捷的调用指定的商品!

【模版样式自定义】支持自定义模版的样式,定制专属于贵站的风格模版!

【独立支付页面】简洁的WPUI风格独立支付页面,加速付款速度,排除付款障碍!

【自助边栏广告】一次设置,永久自动!

【自助友链交易】给您的博客带来额外的收入!

【阶梯价格支持】让价格更加科学化,营销时代,价格你说了算!

【自动发货】支持虚拟商品自动发货!下载链接,解压密码神马都是浮云!

【自动货源】让自动发货不再死板,让所发的货物更自动!

【定时促销】设置打折比率,触发消费激情!

【安全稳定】验证用户输入数据的正确性和合法性,防止价格篡改,禁止SQL注入!

【隐私保护】专为接口使用者提供接口密钥独立设置机制,提升密钥保护等级!

【异步加载全新体验】后台控制面板采用AJAX异步加载技术为您减少带宽!

最新版功能缺陷:

【弱支持商城函数】尚未提供商品堆输出函数,也未提供分类,标签支持!

【弱支持主题集成】考虑到加载速度以及弱支持商城的态度的问题,将付款页面独立了出来!

【弱支持购物车】秉持着弱支持商城的态度和购物习惯,更倾向于单件商品的购买!

【订单搜索功能】该版本对于搜索功能支持得不是很好,在下一个版本中将会得到提升!

插件未来开发方向:

【保持弱商城支持】下一个版本任然会秉持着弱商城支持的态度进行开发!考虑到在商城方面WP没有这个文化,要开启一个WP商城新纪元并不是一个插件就能实现的,这可能需要时间的积淀以及WP的开发态度,正如我们看到的,WP是一个优秀的博客程序!但是这么优秀的一个程序用来做博客似乎是有点浪费,我们将长期保持做博客,做乐趣的态度!

【兼容三次开发性,规范核心代码】插件相对于父程序来说本来就是一个二次开发,在保持自身的稳定性的前提下为WP第三次个性开发提供支付接口也是我们的努力方向!

插件界面截图:

WordPress支付宝Alipay|财付通Tenpay|贝宝PayPal集成插件-wordpress插件-代码笔记 %

VPS分析日志利用nginx过滤恶意访问

学会分析网站日志是一个合格的草根站长所必须的,网站上线后经常会收到各种扫描,那么站长就要学会分析日志得出这些恶意扫面的共同点来过滤这些不友好的访问。这里已v7v3的部分日志截图为例来教大家如何过滤恶意访问,如下图:

VPS分析日志利用nginx过滤恶意访问-VPS教程-代码笔记 %

从上图可以看出这次的“攻击”都是来源与jump.bdimg.com这个域的,这时候我们就可以直接把从jump.bdimg.com这个域下过来的IP全部返回403或者503,这样就可以有效的屏蔽这些恶意访问了,代码如下:

if ($http_referer ~* jump.bdimg.com ) {
return 403;
}

有时候大家还会受到某些攻击器的骚扰,某些攻击器都有特定的user_agent标志,我们则可以直接对包含该标志user_agent的IP进行访问封锁如下图:

VPS分析日志利用nginx过滤恶意访问-VPS教程-代码笔记 %

从以上日志我们可以看出user_agent中包含了UCBrowser,我们这可以对其进行封锁,代码如下:

if ($http_user_agent ~ UCBrowser) {
return 503;
}

封锁多个user_agent标志则可以这样写:

if ($http_user_agent ~* "ua a|ua b"){
           return 503;
       }

有时候我们还可以对特定的访问方式进行封锁,一般情况下都是已GET、以及POST方式。有些扫描器则是已HEAD方式来访问网站的,如下图:

VPS分析日志利用nginx过滤恶意访问-VPS教程-代码笔记 %

遇到以上情况,我们则可以直接禁止HEAD,代码如下:

if ($request_method = HEAD ) {
    
return 403;
    
}

当然还有很多灵活的方法来应对这些不友好的访问,小V这里仅仅是教大家如何分析日志如何针对不同的攻击以及恶意访问来做出做灵活的应对方式。

另外小V还通过分析自己的网站日志得出了一些已知的不友好的user_agent关键字,

地址:http://www.v7v3.com/tool/bot.txt

大家可以将这些UA都封锁掉,也希望看到这篇文章的小伙伴把自己总结到的恶意user_agent回复下让更多人知道。

(PS:以上方法只适用于nginx)

wordpress全站链接(URL)规范化优化方案

在SEO中网站的链接结构以及目录层次都非常重要,百度官方的SEO白皮书内就强调了,一个好的URL结构不仅能让搜索引擎更加容易了解到网站内容,而且也利于访客记忆。很多SEO书籍中都提到了,网站URL的目录层次最好不要超过三层。当然如果URL中包含关键词就更好了。那么WordPress网站该如何设定网站的伪静态才能符合SEO标准呢?

文章页:

应采用“/%category%/%postname%.html”格式的链接,如下图:

wordpress全站链接(URL)规范化优化方案-wordpress教程-代码笔记

采用此结构后搜索引擎在抓取该页面的时候就可以知道该页面是属于那个目录(分类)下的,这样有利于蜘蛛了解整个目录下的主要内容以及目录的主要语义,从而让你的页面在搜索引擎返回同样语义关键词时有更好的排名。不过之前有人说直接使用“/%post_name%/”或者“/%post_id%/”又或者“/%post_id%.html”之类的的伪静态URL结构能让网站的排名,因为网站的根目录下的权重最高,所以越接近根目录的文件或者页面的权重也就更高了,其实不然,这样的URL结构实际上在搜索引擎眼中是杂乱不堪的,没有一个有效的归类,很难分清网站的目录结构,所以强烈不推荐此类的伪静态结构。接下来就是分类页面的URL优化了,大家都知道默认的wordpress分类目录的链接是“http://www.域名.com/category/分类名”这样的,显然这样的结构就会让搜索引擎以为所有“分类名”为是category目录下的一个无后缀名的一个页面。首先我们要将URL这中的category去掉,之前小V提到过两种方法:

插件法:WP No Category Base

代码法:wordpress链接结构优化之标签(category)存档页优化

将连接中的category去掉后分类目录的链接就变为了“http://www.域名.com/分类名”这时对于搜索引擎来说这不是一个目录而是一个页面,加上“/”反斜杠才是一真正的页面,那么如何让分类目录的链接变成“http://www.域名.com/分类名/”这种形式呢?使用以下代码即可:

if (is_admin()) return;
$permalink_structure = get_option('permalink_structure');
if (!$permalink_structure || '/' === substr($permalink_structure, -1))
return;
add_filter('user_trailingslashit', 'ppm_fixe_trailingslash', 10, 2);
function ppm_fixe_trailingslash($url, $type)
{
if ('single' === $type)
return $url;
return trailingslashit($url);
}

将以上代码加到functions.php文件的最后面,记住一定是最后面,否则可能会造成网站报错无法访问的状况。

至于标签页(tag)则保持原状即可。

删除wordpress系统默认产生的缩略图并创建自定义缩略图

前阵子小V接到某客户反馈,说是怀疑网站是不是被黑了,没买多久的空间网站空间就用掉了1.2G多。当时小V也觉得奇怪,虽然客户的wordpress网站是图片站,不过小V看了下文章数量和每篇文章的图片平均大小,应该占用那么多空间啊?当时觉得非常奇怪,正好前天好机油源码集合找小V更换友链的关键词,小V突然想到源码以前曾经找过小V询问过wordpress自动产生的缩略图占用大量网站空间问题。小V立即登录客户的空间查看,果然是缩略图在作祟。wordpress在后台写文章时通过通过“添加媒体”上传,或者直接在“多媒体”中上传的图片都会产生三个缩略图版本,原意是为了方便用户快速的插入不同尺寸的缩略图。

删除wordpress系统默认产生的缩略图并创建自定义缩略图-wordpress教程-代码笔记

那么如何解决wordpress自动生成缩略图从而占用大量网站空间容量的问题呢?其实只需要一段代码即可:

function v7v3_remove_image_size($sizes) {
                unset( $sizes['small'] );
                unset( $sizes['medium'] );
                unset( $sizes['large'] );
                return $sizes;
        }
        add_filter('image_size_names_choose', 'v7v3_remove_image_size');

将以上代码加入到主题的functions.php文件即可删除wordpress自带的缩略图版本,这样一来以后上传的图片就不会产生缩略图版本了,不过之前上传的图片的缩略图依旧存在,大家可以利用工具批量删除。(PS:三种缩略图可以按照自己的需求进行删减。)

有些时候大家可能会用到固定尺寸的缩略图,这是时我们还可以自定义个固定尺寸的缩略图版本,代码如下:

if ( function_exists( 'add_image_size' ) ) {
    add_image_size( 'new-size', 300, 100, true ); //(设置尺寸)
}
add_filter('image_size_names_choose', 'v7v3_image_sizes');
function v7v3_image_sizes($sizes) {
        $addsizes = array(
                "new-size" => __( "固定缩略图")
                );
        $newsizes = array_merge($sizes, $addsizes);
        return $newsizes;
}