leadscloud

Google SEO|外贸营销推广

空客320降落在桃园机场。飞机的降落把我震醒。手机里正好播放到张艾嘉的《戏雪》,这算是一首生僻的歌,陈升写下这样的词——“1948年,我离开我最爱的人,当火车开动的时候,北方正飘着苍茫的雪,如果我知道,这一别就是四十余年,岁月若能从头,我很想说,我不走。”

对于台湾,我的印象一直停留在侯孝贤和杨德昌的电影里。后来魏德胜和九把刀又加工了一下。我喜欢的作家,梁实秋,林语堂,胡适也都去了台湾,而且他们都和鲁迅吵过架。当大陆穷的时候,台湾有钱,后来大陆有钱了——确切的说,是政府和小部分人有钱了,台湾又有了⋯⋯

战火把同一个民族的人分隔在了海峡的两岸,那些具体到每个家庭的悲欢离合已经被时间慢慢抹平。台北的街道的确像优客李林唱的那样,像迷宫一样展开在我的眼前。但是对于异乡人,每个陌生的城市都是迷宫。在酒店住下,诚品书店就在旁边。朋友的眼镜架坏了,于是晚上先陪着朋友去配眼镜。我们坐计程车来到了台大附近,进了一家眼镜店。没有声音酥麻的台妹,老板亲自上阵。朋友看中了一副镜框,但要几天以后才能取。朋友说,那算了,我在台湾只留三天,我要明天就能取的,只能去别的地方看看。这时候,让我诧异的一幕出现了,老板居然从柜台里摸索出了一对隐形眼镜,塞在我朋友手里,说,实在不好意思,没能帮上你的忙,这个送你,先用这个应急吧。连我这般总是把人往好里想的人第一反应也是——我靠,哪有这种好事,这里面是有什么猫腻吧?咱还能走出这家店的店门么?

我们平安的走出了这家眼镜店,换去了隔壁一家。那家眼镜店承诺第二天就可以把眼镜做好,然后那家店的老板用朋友残留下的镜片临时找了一个镜框凑合装了起来,告诉朋友,这个可以晚上用。这两家只是非常普通的路边眼镜店,还是自己随机找的,要不真得让人怀疑是不是组织方安排的,目的为了让大家增加对台湾的好感。

台湾的街道上有不少的小游行和抗议横幅,这一切对于大部分大陆游客来说都太新鲜了,于是很多游客守着电视机看晚上的政论节目。我妈妈去年从台湾旅游回来,就说那里太好玩了,领导人可以在电视里随便骂,比快乐大本营还要欢乐。相比之下,台湾人对这些早就习以为常。但给我留下了比马英九先生更深印象的是王鸿松先生——他不是明星政客,也不是文人墨客。他是一个计程车司机。一天早上,我从酒店下楼,打了他的车去阳明山。到了目的地我发现把手机拉在出租车上。我没有记下车牌号。朋友们忙着帮我联系出租车公司,看看能不能查到一些讯息,我也打给酒店,想让他们查看一下监控录像,确认车牌号。一会儿,我接到了酒店的电话,我问他们,是查到车号了么?他们说,监控录像里讯息太多,还没有查到,但是刚才有一位出租车司机开回酒店,把一个手机交给了前台,说是一位从你们这里上车的先生遗落在车里的。。。。。。

说实话,我石化了。我问到了出租车司机的电话和名字,说我想酬谢你。王鸿松说,不需要啦,很正常的,小事一桩,我们都是这样的。他告诉我,前几天刚和几个朋友环岛开了一圈,打算过一段时间来大陆旅行。他说他开计程车就是为了能够去更多的地方看看。末了居然还来一句:我有QQ和新浪微博的,你的号是什么,我们可以在网上联系的。这顿时让我觉得两岸关系非常亲密。接着,他继续说,你有脸书么?我说,大陆的互联网没有脸……书。他说,哦,对哦,是哦。我不和你说了,有客人了,再联系哦。

也许是我的命好,遇见的都是好人,也许是我走的肤浅,几乎所有人都和气。毫无疑问,如果我在台湾多停留几天,我当然能看见他不如人意的一面,也许他硬件不够新,也许他民粹也涌现,也许他民怨从不断,也许他矛盾也不少。没有完美的地方,没有完美的制度,没有完美的文化,在华人的世界里,它也许不是最好的,但的确没有什么比它更好了。

这篇文章里不想谈论什么政治和体制。作为一个从大陆来的写作者,我只是非常失落。这些失落并不是来自于这几天浅显的旅行,而是一直以来的感受。我失落在我生存的环境里,前几十年教人凶残和斗争,后几十年使人贪婪和自私,于是我们很多人的骨子里被埋下了这些种子;我失落在我们的前辈们摧毁了文化,也摧毁了那些传统的美德,摧毁了人与人之间的信任,摧毁了信仰和共识,却没有建立起一个美丽新世界,作为晚辈,我们谁也不知道能否弥补这一切,还是继续的摧毁下去;我失落在不知道我们的后代能不能生存在一个互相理解而不是互相伤害的环境之中;我失落在作为一个写作者,我写这篇文章的时候还要不停的考虑措辞,以免哪个地方说过了线;我失落在当他人以善意面对我的时候,我的第一反应居然是会不会有什么阴谋;我失落在我们自己的文艺作品很少能够在台湾真正流传,而能在台湾流传的关于我们的大多是那些历史真相和社会批判,更让人失落的是那些批判和揭露往往都是被我们自己买了回去,用于更加了解我们自己。除了利益和人与人之间的斗争,我们几乎对一切都冷漠。这些冷漠和荒诞所催生的新闻都被世界各地的报纸不停的放在头版,虽然可以说这是官方的错,但无奈却也成了这个民族的注释。

是的,我要感谢香港和台湾,他们庇护了中华的文化,把这个民族美好的习性留了下来,让很多根子里的东西免于浩劫。纵然他们也有着这样那样的诟病。而我们,纵然我们有了丽兹卡尔顿和半岛酒店,有了gucci和lv,我们的县长太太也许比他们最大的官员还要富有,我们随便一个大片的制作成本就够他们拍二三十部电影,我们的世博会和奥运会他们永远办不起,但走在台湾的街头,面对着那些计程车司机,快餐店老板,路人们,我却一点自豪感都没有。我们所拥有的他们都拥有过,我们所炫耀的他们的纳税人不会答应,我们所失去的他们都留下了,我们所缺少的,才是最能让人感到自豪的。

文化,法制和自由是一个民族的一切,别的国家不会因为你国的富豪疯狂抢购了超级跑车和顶级游艇而尊敬你的国民。坐在空客330的机舱里,飞翔在两万英尺的高空,一个半小时就到了上海,窗外望去,都是海水。既然我们共享着太平洋的风,就让它吹过所有的一切。

http://han-han.info/2012/05/11/%e5%a4%aa%e5%b9%b3%e6%b4%8b%e7%9a%84%e9%a3%8e/
http://blog.sina.com.cn/s/blog_4701280b0102e5np.html

[\W\w]*?
([\s\S]*)
在Dreamweaver里,如果你想匹配多行,使用.*?是不行的。可以使用上面的表达式。比如你想匹配 <ul>...</ul>这段代码,可以使用
<ul>[\s\S]*</ul>
<ul>[\W\w]*?</ul>

歌手:孙燕姿 专辑:风筝

你和我就算了吗
别用沉默代替回答
陌生得让我害怕
心像被针扎了一下
总是不提那句话
我想你是故意装傻
不是不懂得表达
还在等什么说清楚吧
我想你不是真的爱我
习惯被忽略不算自由
相爱的人总是不懂
为什么真心伤得特别重
我想你不是真的爱我
当体贴渐渐受到冷落
其实爱有很多选择
我也可以给你自由
终于明白那句话
爱能让人一夜长大
不成熟的感情啊
让我变得小心害怕
我和你就算了吧
不想再为爱而挣扎
爱情若没有火花
至少了解后懂得放下

在wp-includes/query.php的2180行,添加 $q[‘s’] = str_replace(array( ‘+’, ‘%20’, ‘-‘ ), array( ‘ ‘, ‘ ‘ , ‘ ‘), $q[‘s’]);

1, Download Sphinx search engine from Sphinx

1
2
3
wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.tar.gz

tar xzvf sphinx-0.9.8.tar.gz

2, Install MySQL mysql-devel

1
yum install mysql-devel

3, Configure Sphinx

1
2
3
4
cd sphinx-0.9.8
./configure --prefix /home/sphinx/sphinxsearch --with-mysql
make
make install

4, Create a configuration file

1
2
cd /home/sphinx/sphinxsearch/etc
cp sphinx.conf.dist sphinx.conf

5, Edit sphix.conf

vi sphinx.conf

Configuration file sphinx.conf for wordpress

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
source mywhiteboard
{
type = mysql
sql_host = localhost
sql_user = mywhiteboard
sql_pass = a1b2c3z4y5x6
sql_db = ivdb
sql_port = 3306
sql_query = SELECT id, post_title, post_content FROM wp_posts
sql_query_info = SELECT * FROM wp_posts WHERE id =$id
}

index mywhiteboard
{
source = mywhiteboard
path = /home/sphinx/sphinxsearch/var/data/mywhiteboard
docinfo = extern
mlock = 0
morphology = stem_en
enable_star=1

stopwords = /home/sphinx/sphinxsearch/var/data/stopwords.txt
min_word_len = 3
charset_type = sbcs
min_prefix_len = 0
min_infix_len = 3
html_strip = 1
html_remove_elements = style, script
}

indexer
{
mem_limit = 256M
}
searchd
{
port = 3312
log = /home/sphinx/sphinxsearch/var/log/searchd.log
query_log = /home/sphinx/sphinxsearch/var/log/query.log
read_timeout = 5
max_children = 30
pid_file = /home/sphinx/sphinxsearch/var/log/searchd.pid
max_matches = 1000
seamless_rotate = 1
preopen_indexes = 0
unlink_old = 1
}

6, make a directory for indexes

mkdir /home/sphinx/sphinxsearch/var/data/mywhiteboard

7,  Start indexer:

home/sphinx/sphinxsearch/bin/indexer --config  /home/sphinx/sphinxsearch/etc/sphinx.conf --all

Sphinx 0.9.8-release (r1371)
Copyright (c) 2001-2008, Andrew Aksyonoff

using config file '/home/sphinx/sphinxsearch/etc/sphinx.conf'...
indexing index 'mywhiteboard'...
collected 1104407 docs, 1938.9 MB
sorted 6551.8 Mhits, 98.5% donedone
total 1104407 docs, 1938867135 bytes
total 5126.826 sec, 378180.78 bytes/sec, 215.42 docs/sec

8, To test if it is working:

1
/home/sphinx/sphinxsearch/bin/search  --config /home/sphinx/sphinxsearch/etc/sphinx.conf insulin
....
20\. document=9345, weight=3
    id=9345
....
words:
1\. 'insulin': 30601 documents, 109926 hits
1
2
3
4
5
6
7
8
9
10
ls -la
/home/sphinx/sphinxsearch/var/data/mywhiteboard
drwxr-xr-x 3 root root 4096 Oct 21 16:20 .
drwxr-xr-x 4 root root 4096 Sep 11 20:08 ..
-rw-r--r-- 1 root root 0 Oct 21 15:32 mywhiteboard.spa
-rw-r--r-- 1 root root 14925566596 Oct 21 16:20 mywhiteboard.spd
-rw-r--r-- 1 root root 237 Oct 21 16:20 mywhiteboard.sph
-rw-r--r-- 1 root root 57254921 Oct 21 16:20 mywhiteboard.spi
-rw-r--r-- 1 root root 0 Oct 21 15:32 mywhiteboard.spm
-rw-r--r-- 1 root root 22721504506 Oct 21 16:20 mywhiteboard.spp

wordpress-sphinx-search 插件的安装教程

http://www.ivinco.com/software/wordpress-sphinx-search-tutorial/

多亏日子还有难过和失落,感激了生命必须放弃或选择,让我们在一场场身不由己里努力进化成更好的自己。

我们增加一个自定义字段:user_only,如果这个值不为零,这这篇日志或者页面是只能给注册用户浏览,然后通过 the_content 来控制内容显示,这样就能简单的并且灵活设置具体到哪篇文章或者页面是只能注册用户浏览。详细代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
/*
Plugin Name: User only
Plugin URI: http://fairyfish.net/m/post-for-user-only/
Description:通过给 user_only 这个自定义字段设置为 true 来设置当前文章仅限于会员浏览。
Author: Denis
Version: 1.0
Author URI: http://wpjam.com
*/
add_filter('the_content', 'post_user_only');
function post_user_only($text){
global $post;

$user_only = get_post_meta($post->ID, 'user_only', true);
if($user_only){
global $user_ID;
if(!$user_ID){
$redirect = get_permalink($post->ID);
$text = '该内容仅限于会员浏览,请<a href="'.wp_login_url($redirect).'">登录</a>!';
}
}
return $text;
}
?>

把上面带复制成一个PHP文件上传到插件目录,激活即可。

原文件地址:http://fairyfish.net/m/post-for-user-only/

Search and Replace(搜索和替换)是一个允许你搜索和替换数据库中任意文本的 WordPress 插件。

注意:

但是这个插件同样也在存在着风险,因为它是直接使用 SQL 进行文本替换,它直接操作修改了数据库,并且这样的修改时不可撤销的,所以不建议 WordPress 初级用户使用这个插件,对于 WordPress 有一定熟悉的用户,建议使用这个插件进行操作之前,对数据库进行备份,这样万一出错还有修正的机会。

Search and Replace 是直接使用 MySQL 的 Replace 进行替换操作的,所以这个插件是大小写敏感的,并且不支持使用正则表达式进行文本替换,所以这是这个插件小小的一个缺憾,但是它完整的界面和易用性,保证了它能够完成了我们大部分的批量文本修改替换工作,并且这个插件只在后台使用,所以使用之后我们可以直接关闭它,完全不会占用任何系统资源。

相关资源:

插件作者:http://fairyfish.net/2010/05/31/search-and-replace/

wordpress下载地址:http://wordpress.org/extend/plugins/search-and-replace/

相关文章:http://www.love4026.org/313338/find-and-replace-in-wordpress-using-mysql/

wordpress有时需要批量替换某个关键词。通过插件可以实现,但也可以通过mysql快速替换,不仅可以替换文章内容,还包括文章标题等。

方法:

1. 使用PHPMYADMIN进入数据库管理, 搜索errorkeywords, 你就可以看到哪些表里面包含了这个字段.
2. 点击SQL, 执行SQL语句:

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

示例:

1
update wp_posts set post_content=replace(post_content,'errorkeywords','keywords')

WordPress数据库里面几个重点替换的表和字段:

表wp_posts里面的post_content (文章内容)
表wp_posts里面的pinged (ping内容)
表wp_posts里面的guid (WordPress默认链接结构)
表wp_comments里面的comment_author_url (留言作者URL地址 )

当然, 上面几个是最重要的.还有其它字段, 你根据搜索结果自己查找.

国外博客最近公布了关于wordpress主题的一个0day,这些主题都使用了timthumb.php这个文件,该文件用于处理图片的显示效果等,原文地址可以参见:http://sebug.net/vuldb/ssvid-20811 。这里具体分析下漏洞的成因,其实在国外这篇文章也有分析,只是不是很清晰.

PHP 与 Wordpress 介绍 Appdir

PHP

WordPress

漏洞成因

大家可以首先打开这个链接,版本控制,可以看到:

r143 ,stronger website domain checks (don’t allow http://wordpress.com.hacker.com/)

作者在这里标明了已经修复了这个漏洞,那么我们就对比下r143和r142两个版本的区别。

对比分析这两个版本,发现结果如下:

1
2
3
4
5
6
7
8
foreach ($allowedSites as $site) {
if (strpos (strtolower ($url_info['host']), $site) !== false) {
$isAllowedSite = true;
}
foreach ($allowedSites as $site) {
if (strpos (strtolower ($url_info['host'] . ‘/’), $site) !== false) {
$isAllowedSite = true;
}

多了一个’/‘,在匹配的时候限制了白名单域名只能在地址的最后面,这样就限制了可以在任意的域名前面加上白名单的域名,举个例子来说,我们假如有域名xyz.com,那么我们可以随便添加二、三级域名。先看看timthumb限制了哪些域名。

1
2
3
4
5
6
7
8
9
// external domains that are allowed to be displayed on your website
$allowedSites = array (
‘flickr.com’,
‘picasa.com’,
‘blogger.com’,
‘wordpress.com’,
‘img.youtube.com’,
‘upload.wikimedia.org’,
);

这样的话我们就可以添加blogger.com.xyz.com,成功绕过白名单的检测。看到这里我不禁想到我上次分析的百度贴吧flash过滤机制研究,也存在一定的问题,因此在匹配或者是搜索的时候需要特别注意。

利用

如果大家看了原文的留言,别人给出了利用方法(不过我没域名测试),这里我们还是对源码进行一下分析。

首先是引入url的地方:

1
2
3
4
5
// sort out image source
$src = get_request (‘src’, ”);
if ($src == ” || strlen ($src) &lt;= 3) {
display_error (‘no image specified’);
}

get_request函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
*
* @param [HTML_REMOVED] $property
* @param [HTML_REMOVED] $default
* @return [HTML_REMOVED]
*/
function get_request ($property, $default = 0) {
if (isset ($_GET[$property])) {
return $_GET[$property];
} else {
return $default;
}
}

然后是文件检查:

1
2
3
4
5
6
7
8
9
10
11
// clean params before use
$src = clean_source ($src);
// get mime type of src
$mime_type = mime_type ($src);
// used for external websites only
$external_data_string = ”;
// generic file handle for reading and writing to files
$fh = ”;
// check to see if this image is in the cache already
// if already cached then display the image and die
check_cache ($mime_type);

其中cleansource函数中调用checkexternal函数实现了写文件操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
**
*
* @global array $allowedSites
* @param string $src
* @return string
*/
function check_external ($src) {
global $allowedSites;
// work out file details
$fileDetails = pathinfo ($src);
$filename = ‘external_’ . md5 ($src); //注意这个地方是文件生成后的文件名
$local_filepath = DIRECTORY_CACHE . ‘/’ . $filename . ‘.’ . strtolower ($fileDetails['extension']);
// only do this stuff the file doesn’t already exist
if (!file_exists ($local_filepath)) {
if (strpos (strtolower ($src), ‘http://’) !== false || strpos (strtolower ($src), ‘https://’) !== false) {
if (!validate_url ($src)) {
display_error (‘invalid url’);
}
$url_info = parse_url ($src);
// convert youtube video urls
// need to tidy up the code
if ($url_info['host'] == ‘www.youtube.com’ || $url_info['host'] == ‘youtube.com’) {
parse_str ($url_info['query']);
if (isset ($v)) {
$src = ‘http://img.youtube.com/vi/’ . $v . ‘/0.jpg’;
$url_info['host'] = ‘img.youtube.com’;
}
}
// check allowed sites (if required)
if (ALLOW_EXTERNAL) {
$isAllowedSite = true;
} else {
$isAllowedSite = false; //注意这个地方是重点
foreach ($allowedSites as $site) {
if (strpos (strtolower ($url_info['host']), $site) !== false) {
$isAllowedSite = true;
}
}
}
// if allowed //判断正确了就直接写文件了。
if ($isAllowedSite) {
if (function_exists (‘curl_init’)) {
global $fh;
$fh = fopen ($local_filepath, ‘w’);
$ch = curl_init ($src);
curl_setopt ($ch, CURLOPT_TIMEOUT, CURL_TIMEOUT);
curl_setopt ($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0′);
curl_setopt ($ch, CURLOPT_URL, $src);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_FILE, $fh);
curl_setopt ($ch, CURLOPT_WRITEFUNCTION, ‘curl_write’);
// error so die
if (curl_exec ($ch) === FALSE) {
unlink ($local_filepath);
touch ($local_filepath);
display_error (‘error reading file ‘ . $src . ‘ from remote host: ‘ . curl_error ($ch));
}
curl_close ($ch);
fclose ($fh);
} else {
if (!$img = file_get_contents ($src)) {
display_error (‘remote file for ‘ . $src . ‘ can not be accessed. It is likely that the file’);
}
if (file_put_contents ($local_filepath, $img) == FALSE) {
display_error (‘error writing temporary file’);
}
}
if (!file_exists ($local_filepath)) {
display_error (‘local file for ‘ . $src . ‘ can not be created’);
}
$src = $local_filepath;
} else {
display_error (‘remote host “‘ . $url_info['host'] . ‘” not allowed’);
}
}
} else {
$src = $local_filepath;
}
return $src;
}

修复

作者已经修复了漏洞,可以到 http://timthumb.googlecode.com/svn/trunk/timthumb.php 更新你的 timthumb 脚本 。最新版本为 2.8.10

wordpress的一些插件很可能存在漏洞,所以使用的时候请注意。可以到儿查找一些wordpress漏洞方面的问题。

http://sebug.net/appdir/WordPress

里面介绍了wordpress的某些插件引起的安全问题。

0%