2011/02/04

我要往geek的道路上狂奔不止而去了……

抱歉游记贴到一半又杀出一片无关文章,但其实是息息相关的……我觉得我所有的geek潜质都是被这博客给逼出来的,有时候真是想想搞个新浪博客多省心哪,什么域名解析啊sql数据库啊都跟我没关系了……可是,不自由毋宁死,双子座啊,啊啊啊!

先说前几天,博客就出了问题,顶级域名打开变成cPanel的界面,但是用户名密码都显示出错,怎么都登不进去;wp-admin的后台也显示找不到。于是找主机商投诉,主机商让我把域名解析到一个新的ip地址,又给了我两个新的域名解析服务器(Nameserver)。于是我先重新解析了ip地址,又把Nameserver改成了新的,全然不知其实两者只能取其一。但这不是问题,问题是,这么重新设置了一番后,虽然cPanel和wp-admin都可以进了,但是首页还是自动跳转到http://leelily.me/cgi-sys/defaultwebpage.cgi。过了一天之后,也不知道是服务器好了,还是我老早清空DNS缓存的动作终于产生了效果,莫名其妙就都好了。

好景不长,又过了半天也不知道一天,主页又开始跳转到http://leelily.me/cgi-sys/defaultwebpage.cgi。于是我将上面那一串动作又反反复复进行了一遍,先改ip解析,清DNS缓存,测试,无效;再改Nameserver,等待其生效,清DNS缓存,测试,依然无效。于是继续投诉,就又收到一个新的ip地址。再改ip解析,清DNS缓存,测试,生效了,那就是昨天那篇博诞生的背景……但今天打开首页一看,又出错!!!于是再从头重复一遍,设成第一个ip地址,清DNS缓存,测试,无效 -> 设成第二个ip地址,清DNS缓存,测试,无效 -> 改Nameserver,清DNS缓存,测试,it works! 这个就是现在的状态……

抓紧这难得正常的阶段开始更博。游记贴到第四篇,在leelily版加上gatsby版的Day 4后,按下更新键,没有像往常一样刷新页面然后reload更新后的编辑页面,而是直接跳到了404页面!于是上google求解。WordPress的support forum倒是有很多cannot update post之类的问题,但是和我症状还是不太一样。我在后台反复测试,发现也不是所有文章更新都会跳转404,有些还是正常的。但那些会404的,无论我更新什么内容,甚至什么都不改,只是按下更新键,也会404。你说它设置了敏感词过滤吧,有些全中文的文章也不能更新,它美国的服务器总不见得和GFW一样过滤中文吧,何况我那些文章都是极纯洁极纯洁的啊!

于是继续在google上找解药。那些常规的解法我自然都试过了:禁所有插件(这个以前出过问题所以有经验,是第一个尝试的),怕光禁了还不够彻底,干脆在cPanel上把整个插件文件夹隐姓埋名,新建个完全干净的wp-plugin文件夹,no luck;后来看到有人说主题也可能冲突,于是把主题改回default的Twenty Ten,still no luck;还尝试过还原备份,甚至开始研究怎么建立镜像站了……no luck no luck no luck……

经过约莫两个小时的折腾后,终于找到了一个突破点。问题可能跟个叫mod_security的玩意儿有关,根据这篇文章

mod_security

mod_security works by intercepting requests to the webserver, be it a GET request or a POST request. When you post an article to WordPress by clicking “Save and Continue Editing”, “Save”, or “Publish”, a POST request is made to your server. This request is then intercepted by mod_security which does some analysis of the POST’ed data. Based on filtering rules set forth by your hosting provider, your post will either pass or fail to validate. If your POSTed data fails to validate, the default action would be to generate a 404 error.

大致意思就是个拦截服务器请求的模块,送进个filter里走一圈,过不了filter的就转去404了。文章给出的解决办法是绕过这个模块:先修改public_html文件夹下的.htaccess文件测试一下自己的权限,然后禁了这个模块或者禁了过滤列表。我沿着这个思路继续搜,发现这样的建议还不少,但也有人说绕过模块的方法很不安全不建议用,当然也有人说it doesn’t work。又查了下中文google,有人提到博客搬家的时候出现过同样问题,建议是干脆不要把原来的.htaccess文件搬过来了——我灵机一动,那么我也不要改了,直接把那.htaccess文件删了不就得了!

当然断章取义自以为是是很不好的品质,删了.htaccess后的我的博客变成了一个静态页面,没有链接了……于是把原来备份的文件上传回原来位置,链接倒是回来了,但是打开全部出错。在cPanel的文件管理器里用内置的代码编辑器打开.htaccess一看,空空如也啊也不知道为啥……我本地的备份明明就是有内容的啊!于是再把本地的文件内容给拷了回去,总算恢复原状了。既然直接删不行,那就只好试试修改了,先试着改成禁用模块,无效;再试着禁filter,还是无效。不太安全的last resort都exhausted了,绝望中……开始考虑把整个数据库清干净了然后把WordPress重新装一遍……真是越debug越bug啊……

此时突然又灵机一动:我在这儿改啊改的,但其实还没确定到底是不是这mod_security的问题呢,说不定根本就是服务器抽其他风了呢?如果是mod_security的话,那说明回到最初的想法了——还是文章里有敏感词啊!于是我采取了非常简单但也非常有效的测试方法:找了篇比较短的404文章,把正文内容删了,点更新,结果……竟然就更新成功了!这时候我才意识到现在的问题和我最初想到的敏感词问题是不一样的,并不是说服务器会过滤敏感词内容,而是会过滤敏感词的请求——也就是变化,也就是原来的文章有敏感词并不影响它的存在,但是要添加新的有敏感词的文章或者更新有敏感词的文章的话,就会触发它的filter了。

于是我就在那篇测试文章里开始查找那filter的G点了——正如我早就提到的,这篇文章根本就没有英文单词,也没有添加任何图像或效果,所以也没有任何多余的html代码,我实在很难想象这样一篇文章会包含任何敏感词啊……结果,经过我逐段删除测试,竟然还真的被我找到了那个“敏感词”——竟然是这个!!!我瞬间雷翻……

当然为了证实该敏感词,我把其他404文章也都打开测试了一遍,经鉴定,还真是它!!!那就是——————————%

所有404文章内都含有这个符号,不是100%或者99.99%就是!@#$%^&*之类的,删除百分号后一切正常。后来经程序员指导说,百分号在编程中确实挺敏感的——做了下功课,还果真是SQL Server通配符来着。可是这是博客啊博客啊博客,就算我可以把100%写成百分之一百,可“百分之九十九点九九”也未免太蛋疼了吧?!要怎样sb的filter rule才会把这个符号给一刀切地禁了的啊?!

那这篇博客里的%是怎么通过服务器的请求发布出来的呢?哈,其实也很简单,因为我最后一次灵机一动——发现全角%可以!我就这样为了这坑爹的%折腾了整整一个晚上……不过听说程序员为了一个坑爹的%可能折腾好几天也说不定……我这样都抓狂到死,程序员果然是这世界上最杯具的群体之一啊……

当然,全角不能解决所有问题,

Posted by leelily

双子女,博爱,犀利,rp好,琴棋书画俱不全,文科生中的理科生,理科生中的文科生 有经常性失眠倾向的小睡神,乔帮主时代的苹果教徒,阿婆粉,木拓粉,以周游世界为人生使命 是律师又不是律师,常年求包养……特征:好养活

View more posts from this author
%d 博主赞过: