使用 .htaccess 提高 WordPress 的安全性和可用性
August 1st, 2007 Denis
尽管 .htaccess 只是一个文件,但是它能改变你服务器上的设置和允许你做很多不同的东东,如最受欢迎的是它能让你定制化 404 错误页面。.htaccess 其实并不难,你可以认为它只是由一些简单命令或者用法说明组成的文本文件,不过他却能极大的提高你站点的安全性,所以没有借口不去用它。
创建 .htaccess 文件时可能给你带来一些问题。写入内容到这个文件是非常容易的,你只需输入合适的代码到文本编辑器中(如记事本)。但是你可能在保存文件的时候碰到问题。 因为 .htaccess 是一个非常奇怪的文件名(这个文件没有名字而只有一个8字符的扩展名)。这个可能在特定的系统中不能被接受(如 Windows 95)。在绝大多数的操作系统中,你可以尝试在保存文件的时候输入以下文件名:”.htaccess”(包括引号)。如果这不起作用,你可能需要先把它命 名为别的名字(如 htaccess.txt),然后上传到服务器。上传之后,在 FTP 工具中重命名它。
尽管通过 .htaccess 可以做很多事情,但是这篇日志主要关注的是如何提高 WordPress 的安全性和可用性。
- 保护 .htaccess 自身的安全性。阻止用户通过读取和写入 .htaceess 来更改安全性的设置。
<files .htaccess>
order allow,deny
deny from all
</files> - 隐藏服务器的数字签名。隐藏服务器的数字签名之后,入侵者将很难找到有机会找到安全漏洞,因为他们不知道背后的服务器是什么。
ServerSignature Off - 限制上传文件的大小。这个能够帮助阻止 DoS 攻击(用户通过上传巨大的文件来冲垮服务器)并且能够节约带宽。
LimitRequestBody 10240000
# limit file uploads to 10mb - 停止 mod_security 过滤器。这是一个可选的设置并且要小心处理。这些指令告诉服务器不要使用 mod_security 过滤器,因为 mod_security 过滤器不允许用户发表含有这些单词 “curl”,“lynx” 或者 “wget” 等等单词的文章。这个看起来有点琐碎,但是这个让一些站点头痛,因为这些单词几乎那些站点每天都会用到。
SecFilterInheritance Off - 保护 wp-config.php 文件。我们可以通过 .htaccess 文件阻止用户读取和写入 WordPress 的主配置文件。这个指令假设 WordPress 是安装在站带你的根目录。
<files wp-config.php>
order allow,deny
deny from all
</files> - 指定自定义错误文档。这条指令做的更多是站点的可用性而不是安全性。它们指定了哪个页面将被显示,一旦服务器错误,如页面找不到(代码 404) 禁止访问(代码 403)等等。
ErrorDocument 404 /notfound.php
ErrorDocument 403 /forbidden.php
ErrorDocument 500 /error.php - 禁止浏览目录。这将阻止服务器在没有找到 index 文件(如 index.html,index.php 等等)的情况下显示文件夹目录内容。这能阻止用户看到文件夹的内容使得更难对网站发动攻击。
# disable directory browsing
Options All -Indexes - 防止图片盗链。这个能够阻止其他网站盗链本网站的图片,迫使他们 要么指向整个页面,或者其他存储图像的地方。这个保存了宝贵的带宽并且能够增加流量(虽然只是一点点)。下面的代码将会显示 stealingisbad.gif 这张图片,当有人试着热链到到你的网站来显示图片
#disable hotlinking of images
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?yourdomain.com/.*$ [NC]
#RewriteRule \.(gif|jpg|png)$ http://www.yourdomain.com/stealingisbad.gif [R,L] - 在你的站点给每个 URL 设置符合规定的或者“标准”的链接。这能够帮助提高网站的可用性和提高网站在搜索引擎中的排名。总之,它会把来自 http://yourdomain.com 的请求重定向到 http://www.yourdomain.com/.
# set the canonical url
RewriteEngine On
RewriteCond %{HTTP_HOST} ^yourdomain\.com$ [NC]
RewriteRule ^(.*)$ http://www.yourdomain.com/$1 [R=301,L] - 保护博客免受垃圾留言的侵扰(和普通方式提交的垃圾留言)。最后的那条指令将会阻止用户直接从其他网站的留言提交框发表留言,虽然这不是一个包罗万象的反垃圾留言的方法,但是它确实能够帮助你。
# protect from spam comments
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} .wp-comments-post\.php*
RewriteCond %{HTTP_REFERER} !.*yourdomain.com.* [OR]
RewriteCond %{HTTP_USER_AGENT} ^$
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
加入这些指令之后,你应该添加 WordPress 用于管理永久链接的代码。还有很多的指令和很多的方法可以提高网站的可用性和安全性,不过这里所列出的应该占了日常所需的大部分了。当你上传该文件到服务 器上之后,你应该一遍有一遍的测试直到你觉得所有的东西都工作正常,再测试一遍。检查下是否受保护的文件还能不能被访问,你依旧允许访问的文件和文件夹能 否还能访问。常规的经验可能是棘手的事情,它们可能导致看似随机的问题,所以在你发布你的网站之前务必完全的测试你的网站。
翻译自:Using .htaccess to Secure and improve Wordpress





1. windywinter | August 4, 2007 at 7:16 pm | #
.htaccess不是没有名字而只有一个8字符的扩展名,它的名字就是htaccess,没有扩展名,最前面的”.”表示它是一个隐藏文件。
2. Denis | August 4, 2007 at 9:44 pm | #
谢谢 windywinter,又学到了东东。
3. shaoqing | August 28, 2007 at 2:02 pm | #
你好。我也想在网址前加上WWW,
我在根目录下找不到这个文件。难道需要自己创建?怎么创建?
4. wangyoubin | December 1, 2007 at 10:07 pm | #
你好,请问一个问题。你的博客导航地址是这个样子的。http://fairyfish.net/plugins/。但是我把地址设置为wordpress永久链接设为 %post_name%,页面打不开。看了你的文章后我知道是要写个.htaccess 的文件,在这里你讲了很多,我还是不明白该怎么样做。
5. Denis | December 1, 2007 at 10:43 pm | #
你的空间不支持 mod_rewriter
6. Mao-Dun | December 3, 2007 at 4:00 pm | #
我用的是51.net的空间,他们说他的空间支持mod_rewriter,可我的Wp2.3.1的永入链接却无效,如何确定他们是不是在撒谎呀?
7. 不甘堕落 | January 4, 2008 at 4:39 am | #
你好,你的文章我觉得很受用,我也支持原创
我转载了你的文章.但我把它设置为不公开的.也就上一方便自己学习用.
不知道你是否同意.
交个朋友可以吗?
8. moon | April 4, 2008 at 6:58 pm | #
so useful
9. joronray | September 23, 2008 at 3:21 am | #
能否提供下完整的包括所有文章里内容的.htaccess?