(译) 5个插件使wordpress更安全

本文译自5 Plugins to Keep WordPress Secure。由Easwy翻译,转载请注明:转载自Easwy的博客 [ http://easwy.com/blog/ ]

本文由Mr. I.供稿

几天前,有读者在他的博客被入侵后寻求Daniel的建议,Daniel给出了一些好的安全措施以保证wordpress的安全。万一你没看到这篇文章,请在这里阅读:What if my WordPress Blog Got Hacked with the Google Redirect?

我应用了Daniel建议的这些安全举措,并找到了一些支持这些功能的插件。

下面是我找到的一些插件,可以使wordpress更安全:

  1. Limit Login Attempts : 这个插件在用户4次(可以修改)输错密码后阻塞该用户20分钟。这是避免暴力破解的一个好方法。
  2. Sabre : 如果你的wordpress博客允许用户注册,并且你看到很多虚假注册,这个插件可以阻止那些由机器人产生的虚假注册。它可以增加图像验证或者算术验证以及其它手段,来保证不会创建虚假注册用户。
  3. Semisecure Login : 这个插件使用公钥对密码进行加密,来增强登录过程的安全性。然后服务器端通过私钥进行解密。需要Javascript和PHP的支持。
  4. Bad Behavior : 这个插件通过密罐项目(Project Honey Pot)的数据库查询访问者的IP地址,以确定访问者是否是Spammer。如果可疑,它会阻止这个IP访问你的博客。
  5. Secure WordPress : 这个插件提供了一些小功能,检查你的wordpress是否安装安全。它对非管理员用户隐藏wordpress的版本信息,并在plugin目录中放置一个空的index.php文件以防止访问者访问plugin目录。

所有这些插件都是wordpress 2.7兼容的。

深入阅读:Daniel的3 Must Apply Security Tips for WordPress

不要忘记分享你所采用的使wordpress更安全的插件及技巧。

Mr. I是Blogging With Success的发起人之一,也是主要作者之一。如果你喜欢这篇文章,请察看他写的50 Must Have WordPress Plugins for WordPress 2.7

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/5-plugins-to-keep-wordpress-secure/

文章的脚注信息由WordPress的wp-posturl插件自动生成

在文章末尾添加版本声明和文章的链接

国内的版权意识还比较淡薄,无论是计算机软件、还是论文,都存在盗版。对于我博客上的文章,一般都是允许自由转载的,前提是保留文章的出处。但总有一些人,直接采用”拿来主义”。自己的劳动成果,这样子被别人掠夺了,实在是心里不舒服。

所以我在博客上每一篇文章的文尾加了如下的声明:

 原创文章,转载请注明:转载自Easwy的博客 [ http://easwy.com/blog/ ]
 本文链接地址: http://easwy.com/blog/archives/add_post_copyright_url/ 

刚开始比较笨,每次都手动加这段声明,发文章还要再去查文章的URL,不仅麻烦,而且容易出错。在wordpress的网站查了一下相关的插件,有几个插件可以插入footer,不过这些插件都不能插入文章的URL。

上周看了一下主题(theme)的代码,发现可以在主题模板中加入这段声明,这样每次文章在显示时,就可以自动显示这段声明了,可以省不少事。

修改主题的方法很简单,我使用的是mg12的inove主题,打开single.php文章,找到the_content()所在的行,在这一行后加上:

<div class=”posturl”>
<p><span class=”bold”><strong>原创文章,转载请注明:</strong></span>转载自<a class=”link” href=”http://easwy.com/blog/” target=”_top”>Easwy的博客</a> [ <a class=”link” href=”http://easwy.com/blog/” target=”_top”>http://easwy.com/blog/</a> ]</p>
<p><span class=”bold”><strong>    本文链接地址:</strong></span> <a class=”link” href=”<?php the_permalink(); ?>” target=”_top”><?php the_permalink(); ?></a></p>
</div>

上面定义了一个新的层(div),修改你的style.css,定义posturl层的样式,就可以定制出自己想要的显示效果。 在我的style.css中,我添加了下面的样式定义:

.posturl{
#	background:#F4F5F7;
	border-top:1px solid #CCC;
#	border-bottom:1px solid #CCC;
	font-style: italic;
#	font-size: 11px;
} 

如果你的主题中没有single.php,应该修改index.php (我没试过)。如果修改index.php,最好加一个判断,只有显示在单个页面里的文章才加文章链接,对显示在首页里的文章则不加,修改如下:

<?php if (is_single()) { ?>
<div class=”posturl”>
<p><span class=”bold”><strong>原创文章,转载请注明:</strong></span>转载自<a class=”link” href=”http://easwy.com/blog/” target=”_top”>Easwy的博客</a> [ <a class=”link” href=”http://easwy.com/blog/” target=”_top”>http://easwy.com/blog/</a> ]</p>
<p><span class=”bold”><strong>    本文链接地址:</strong></span> <a class=”link” href=”<?php the_permalink(); ?>” target=”_top”><?php the_permalink(); ?></a></p>
</div>
<?php } ?>

这种方式,只是在博客显示的文章中加入了版权声明,输出的feed中并没有加,在wordpress.org上有几个feed相关的插件都可以完成这个功能。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/add_post_copyright_url/

文章的脚注信息由WordPress的wp-posturl插件自动生成

使用Redirection插件要加小心

刚刚登录google网站管理员工具时,发现在Sitemap中有一个警告,警告如下:

Table 1. Sitemap 错误和警告

状态 详细信息

网址无法追踪

HTTP 错误:

301 (永久转移)
当我们从您的 Sitemap 中测试网址实例时,我们发现有些网址重定向至其它位置。我们建议让您的 Sitemap 包含指向最终目的地(重定向目标)的网址,而不是包含重定向的其它网址。

URL:

http://easwy.com/blog/archives/xlink-href-can-not-generate-html-hyperlink/

检测到问题的日期:

2009-2-25


尝试用firefox打开google给出的链接,出现了404 not found错误。再仔细看一下地址栏的URL链接,发现链接由

http://easwy.com/blog/archives/xlink-href-can-not-generate-html-hyperlink/

变成

http://easwy.com/blog/archives/xlink-href-can-not-generate/-hyperlink/

注意显示为粗体的部分。也就是说,在URL网址中的”-html“被置换成”/“,难怪Google提示无法打开网址。

既然google提示网址被301永久重定向了,会不会和我用的Dean’s Permalinks Migration插件Redirection插件有关呢?只有这两个插件会301永久定向我的博客链接。

登录wordpress后台,对这两个插件进行了检查,应该不是Dean’s Permalinks Migration插件,它的设置很简单,只是把我旧的永久链接结构,重定向新的永久链接结构(见更改永久链接结构所需的插件一文),不会导致这个问题。那就只剩下Redirection插件了。仔细查看之下,果然发现了问题。

我创建了一条正则表达式(regex)重定向规则,把”/blog/archives/([a-zA-Z0-9-]*).html“全部重定向为”/blog/archives/$1/“。但是正则表达式的写法有问题,在正则表达式中,”.“代表任意字符,上述表达式中的”.html“会匹配到”-html“,所以就导致301重定向了。而重定向后的网址是不存在的,所以才会出现404 not found错误。

问题的原因找到了,解决办法也就简单了,把regex表达的规则改为”/blog/archives/([a-zA-Z0-9-]*)\.html“,对”.“进行一下转义,OK,问题解决了!

现在觉得,Redirection插件功能确实强大,但正因为它太强大了,一旦设置不好,就会导致很奇怪的问题。看来用的时候要加小心。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/an-config-error-about-redirection-plugin/

文章的脚注信息由WordPress的wp-posturl插件自动生成

更改永久链接结构所需的插件

由于最初没有设计好永久链接的结构,趁现在流量还比较小,就调整了我的自定义永久链接结构

调整了永久链接结构后,在wordpress里是即时生效的,只要刷新一下,就可以看到链接结构变化了。但是对已经存在的外链、或者google所抓取的网页来说,它仍然使用原来的永久网址来访问你的网页,这样就会导致HTTP 404 not found错误。

为了防止这种HTTP 404错误的发生,我们需要把原来的永久网址,映射成更改后的永久网址。所幸的是,在wordpress有很多插件可以完成这个工作。

我首先试用的是Advanced Permalinks插件,这个插件的功能很强大,它可能支持多种永久链接结构,可以针对一个帖子或指定ID范围的帖子来指定永久链接结构,或者单独某一分类的文章指定单独的永久链接结构。使用这个插件,你可以不改变老的文章的永久链接结构,让它们仍使用原来的永久网址,而且也不需要对旧的永久网址进行301重定向。这样,就不会出现链接失效的情况,你的Page Rank也不会有损失。

这个插件虽然强大,不过用在我的博客上,似乎有点大材小用。而且,我在使用这个插件时遇到一个问题。当激活这个插件后,访问我的分类页面会出现HTTP 404 not found错误,不过访问日志页面或tag页面又没有问题,不知道是我设置的问题,还是插件的bug。不过我没时间多试,于是就换用了另外一个插件。

在wordpress的官网上下载了Dean’s Permalinks Migration,在wordpress的后台直接上传插件、激活,然后需要简单的设置一下。

在”设置”中找到Permalinks Migration,然后在”Old Permalink Structure:” (旧永久链接结构)一栏中添入你的旧永久链接结构,然后”Update Options”。OK,现在所有访问你旧永久网址的请求,都被301重定向到新的永久网址了。因为采用的301永久重定向,你并不会损失Page Rank。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/useful-wordpress-permalinks-plugin/

文章的脚注信息由WordPress的wp-posturl插件自动生成

如何设置博客的永久链接最好

这两天正在调整easwy.com的永久链接(PermaLinks),可能有些链接会出现HTTP 404 not found错误,请大家谅解。

刚刚开始建设自己的独立博客,对于如何设置wordpress永久链接的格式缺少经验。中间走了不少弯路。如何设置永久链接(PermaLinks)的格式,是仁者见仁,智者见智的。这篇文章根据我在网上看到的一些资料以及自己的经验,来讨论一下如何设置博客的永久链接最好。

刚开始我设置永久链接的格式为: /%year%%monthnum%%day%/%post_id%.html。当初这样设置的想法是,第一,可以直接从帖子的URL,知道此文是何时发表的;第二,帖子的ID是唯一的,不会因为文章修改或删除产生变化,用它可以产生唯一并且最短的链接URL;第三,最终产生的链接中包含.html后缀,看起来更像静态网页。

但使用这种链接结构的问题也是显而易见的。在wordpress 2.7中,文章的发表日期是可以改变的,一旦更改了文章的发表日期,就会导致永久链接发生变化,产生死链;而使用post ID虽然简单,不过产生的链接却不够友好。对读者来说,看到一个名为123.html的链接不会知道这篇文章是讲什么的,而采用文章名就友好多了。从搜索引擎优化(SEO)的角度来看,在URL中嵌入文章的关键字,有利于提高文章的权重(page rank)。

幸好博客刚刚开通,流量还不大,外链也基本没有,于是就下定决心改一下PermaLinks的格式,打算在PermaLinks中去掉日期部分,并加入文章名。不过,对于中文博客来说,直接使用文章名会使URL中出现中文字符。虽然现在浏览器基本都可以支持链接中出现中文,不过如果你的URL带着一长串”%E4%B8…”的字符,看起来很不友好。所以,最好是在发表文章时,设置一下文章的别名(slug),在别名中只使用ASCII字符。这样,最终的永久链接(PermaLinks)里就不会出现中文了。

wordpress 2.7中支持编辑文章别名,如果你在后台编辑器中没有找到”文章别名”的编辑框,需要设置一下显示选项(screen options),在屏幕上显示”文章别名”,以后就可以像写摘要一样,自行输入文章的别名了。多说一句,wordpress缺省把”文章别名”放在后台页面的最下方,填起来很不方便,你可以用鼠标把它拉到上面来。我是把它放在摘要编辑框的上面了。

如果你不愿意为每一篇文章输入别名,也可以采用插件。月光博客上提供了一个post slug插件,这个插件可以自动把文章的中文名翻译成拼音,用它来做为你文章的别名。另外偶爱偶家也开发了一个名为wp slug translate的插件,它可以支持在直接标题里设置slug,或者使用google把中文标题翻译成英文,如果翻译失败,就把中文标题翻译成拼音,来做为别名。

我一般是自己手动输入别名,所以没使用上面说的插件。决定在链接中使用文章别名后,我就把永久链接(PermLinks)的结构改成:/archieves/%postname%.html,看到了吧,我还是很衷情于.html后缀的,因为我总觉得有这个后缀对读者最友好,不过这最终导致了我第三次修改永久链接结构。

上面的永久链接结构对我来说有点不爽的地方时,这样设置后,分类目录、标签、归档的链接就变成类似:http://easwy.com/blog/archives/tag/vim,这样的链接,看起来不像一个静态页面(因为它没有.html后缀),也不像一个目录(没有/后缀)。虽然对搜索引擎和浏览器来讲都没有什么问题,不过看上去不太舒服。而且,如果自己在建内链时,如果不小心加上个尾部后缀”/”的话,就会让搜索引擎认为这是两个页面,不利于SEO。

反正要改永久链接的结构,索性改成自己最满意的吧,于是今天又对结构进行了一次调整。把PermaLinks的格式改成:/archieves/%postname%/,现在终于满意了。

再说一下这种永久链接格式的缺点,应该说,这种结构可能存在的缺陷。我不知道wordpress会不会对重复的文章别名进行限制,如果没做限制的话,这种链接结构,在文章别名相同时,有可能出现重复的URL。

刚才做了个测试,如果文章的别名和以前的文章重复的话,wordpress会自动在另外后加上一个数字的,这样就避免出现重复的URL,看来这个担心可以去除了。

好了,我最终选定我的永久链接结构了,你确定你的链接结构了吗?其实选择链接的结构,完全取决了个人的喜好,没有哪一种是最优的。不过在刚建设博客时就要设计好自己的永久链接,要知道,更改永久链接的代价是相当大的。

在下一篇文章,介绍两个和永久链接结构相关的插件,在你不得不改变你的永久链接结构时,这些插件是非常有用的。

对于已经有一定流量的博客,或者外链已经比较多的博客,还是建议不要随便更改永久链接的结构!

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/select-permalinks-structure/

文章的脚注信息由WordPress的wp-posturl插件自动生成

wordpress中关闭对自己的pingback

刚开始使用wordpress,对其功能还在摸索中,也有诸多的不习惯。

wordpress有一个自动发送pingbacks的功能,当发表文章时,会自动向文章内的链接发送pingbacks。但感到不爽的是,它也会向自己的文章发送pingbacks。有的人喜欢用这个功能,因为这个功能可以实现类似”相关文章”的功能,不过我觉得很不习惯。

我在写文章时,会在文章中插入很多内链,这就导致wordpress向这些文章发送pingbacks。如果有几个内链都指向同一篇文章,那么pingback也会发送几次,这会导致很多重复的pingbacks。另外,似乎在更新文章时,wordpress还会把pingback再发送一次。

因此,我想把wordpress给自己的文章发pingbacks的功能关闭,在这里下载no-self-ping插件,把它上传到wordpress的plugin目录,再到后台把它激活。OK,麻烦解决了!

想到一个问题:我在更新文章时,会不会也给别人的站点发送很多重复的pingbacks?改天做个实验。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/wordpress-no-self-ping/

文章的脚注信息由WordPress的wp-posturl插件自动生成

wordpress的feed出错!

昨天遇到了一个非常奇怪的问题,在试图订阅自己的feed时,google reader总提示”未找到订阅源”。

同时又收到feedburnerin发来的错误提示:

FeedBurner had trouble retrieving your Source Feed: http://easwy.com/blog/feed

The error message is:

Error on line 1: White spaces are required between publicId and systemId.

Actions you can take:

Validate your Source Feed with Feed Validator. This service provides additional detail about the problem, and how to repair it.

于是我直接在浏览器里输入自己feed的地址:http://feed.easwy.com/,显示出来的是一个网页。

看来feed的生成有问题,登录http://feedvalidator.org/check.cgi,输入自己的feed地址,校验的结果如下:

It looks like this is a web page, not a feed. I looked for a feed associated with this page, but couldn’t find one. Please enter the address of your feed to validate.

Source: http://easwy.com/blog/feed

1. <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 3.2 Final//EN”>

2. <html>

3. <head>

4. <title>Index of /blog/feed</title>

5. </head>

6. <body>

7. <h1>Index of /blog/feed</h1>

8. <ul><li><a href=”/blog/”> Parent Directory</a></li>

9. <li><a href=”cgi-bin/”> cgi-bin/</a></li>

10. </ul>

11. <address>Apache/2.2.11 (Unix) mod_ssl/2.2.11 OpenSSL/0.9.8i DAV/2 mod_auth_passthrough/2.1 mod_bwlimited/1.4 FrontPage/5.0.2.2635 Server at easwy.com Port 80</address>

12. </body></html>

feed怎么变成网页了?在google上搜了半天,在wordpress论坛上也有人和我的现象一样,可是别人提供的解决方法却不能解决我的问题。

feed在两天前还是好的。回想自己之前的操作,好像是把wordpress从2.7升级到了2.7.1,然后又新装了一些插件,会不会因为某个插件的原因呢?尝试把所有的插件(plugin)都禁用,效果还是一样。

无奈之下,只好把wordpress重装了一下,这次直接安装2.7.1。安装之后,feed恢复正常了!

问题虽然解决了,可问题的原因还是不清楚。后来想了一下,如果不重装,而只是把wp-rss2.php文件重新替换一下,是不是就可以解决这个问题了呢?如果有其它人遇到类似问题,可以试一下。

原创文章,请阅读页脚的许可方式,转载请注明:转载自易水博客 [ http://easwy.com/blog/ ]

本文链接地址: http://easwy.com/blog/archives/wordpress-feed-error/

文章的脚注信息由WordPress的wp-posturl插件自动生成