Finally gone, the f**king 2009
Better go to sleep now, it’s nothing to me.
Better go to sleep now, it’s nothing to me.
之前还因为一封有趣的邮件觉得spammer们很可爱,没过几天博客就遭到了spammer的轮番轰炸,最开始是每天几条,然后某天早晨当我醒来,等待我的就是500多条垃圾留言,而且还在持续增长,我当时就傻眼了。把那篇日志都删除了,可留言居然都还能发进来,可能是Micolog的一个bug了。只能修改了评论的提交地址,这才阻止了spammer的进攻(blog.py大概第560行)。可好景不长,今天早上醒来,迎接我的又是500多条垃圾留言,于是开始寻找一个阻止spammer的好办法。
从GAE的后台日志中可以看到,spammer的机器人只下载了html文本页面,而其中的所有元素,包括图片、js和css等都不下载,同时我还猜测,这个机器人肯定也没有解析html中的js代码。于是我就把评论的提交地址用js写到网页中,可还是被识别到了,于是又猜测,spammer不会管你网页的结构是怎样的,它只管从中搜索 “<form action=提交网址>” 这样的字符串,找到提交评论的地址,然后就开始不停地向这个地址发送垃圾留言,甚至连网页都不用下载了,所以即使我已经删除了某篇日志,评论还是可以发进来。至于Micolog的"1+1=?"的验证,完全就是一个摆设,可能骗幼儿园的小朋友还行,机器人只要不提交那部分数据就行了,也就是说,完全忽视验证码的存在。
既然spammer们要找的是提交地址,那我就只好把它隐藏起来了。一种方法是把提交地址写到一个外部js文件中,然后在网页中调用。因为机器人不会下载外部js,所以它是找不到提交地址的。
document.write("<form action='/post_comments_and_fuck_spammers' method='post' id='commentform'>")
或者使用javascript压缩加密工具把提交地址处理一下,http://www.codebit.cn/packer.php,上面的js代码就变成了
eval(function(p,a,c,k,e,d){while(c--)
{if(k[c]){p=p.replace(new RegExp('\\b'+c+'\\b','g'),k[c])}}
return p}('2.1("<0 3=\'/4\' 7=\'6\' 5=\'8\'>")',9,9,
'form|write|document|action
|post_comments_and_fuck_spammers|id|post|method|commentform'.split('|')))
之后就该修改一下Miclog的comment.html,把“<form action="/post_comment" method="post" id="commentform">“替换成上面的js。不过正常的访客也必须要启用javascript才能提交留言,所以还要加上一段提示信息并隐藏留言框,再给spammer们提供一个虚假的提交地址:
<noscript>Javascript must be enabled to submit comment<div style='display:none;'><form action='/fuck_spammers' method='post' id='commentform'></noscript>
最后“</form>”之后再加一句:
<noscript></div></noscript>
也许你还可以给欺骗spammer的虚假提交地址上加点东西。^^一直到现在,昨夜里的那个疯狂机器人还在孜孜不倦地刷新着那个侮辱它的页面,我的心终于平衡了一点。
Opera 10.50发布已经两天了,不巧发布的第二天我们就有考试,所以不敢玩啊!昨晚考完试才开始玩起10.50。新功能和特性就不用我再一一重复了。支持CSS3里的圆角属性,所以你现在可以在Opera里看见我博客主题的圆角效果了。卡拉看(Karakan)这下终于让藕粉们扬眉吐气了,接着各种评测马上跟进,Opera的得分超过Chrome,重回“速度”榜排行第一。但其实这样的评测在我看来除了市场宣传以外没有任何实际的意义。我猜Chrome就是靠这样评测才迅速获得那么多市场占有率吧,但一个光秃秃的Chrome真的好用吗?把Chrome作为主力浏览器的又有几个呢?当然,Chrome现在逐渐加入新的功能。js的速度只是评价一款浏览器好坏的一方面,更多的还是综合的可用性,这一点在国内的众多的IE壳上体现得尤其充分,速度都是IE6的,但易用性却远远超过没有装扩展的Firefox,所以才吸引了那么多的用户。
所以我也没太去关心10.50的速度,至于BUG嘛,绝对配得上pre-alpha的称号,如果你遇见了也请不要见怪,不能对一款pre-alpha的软件要求太多。
对比10.10 1893, 10.50增加了也删去了一些命令:
看到Invoke dialog这个命令时我心中窃喜,从字面上看像是直接从dialog.ini中调用对话框,就像我们用show popup menu从menu.ini中调用菜单一样。这不正是我想要的功能吗?我甚至还在Opera的wish list里专门请求了一下,没想到10.5中加入了。可试着用这个命令调用对话框,却怎么也不行,在Opera自带的配置文件中也没有找到使用了这个命令的地方。也许功能还没有完善吧,但愿如此。如果真的可以像调用菜单那样自由地调用对话框的话,Opera的可定制性将再上一个台阶。
新版本中还有一个新功能我非常喜欢,就是变得异常强大的opera:cache。以前的opera:cache只能按时间顺序列出所有的缓存内容,而且缓存稍微大一点的话打开就会很卡,而现在的opera:cache不仅速度更加流畅,还可以按照域名、文件类型和文件大小等进行过滤,喜欢从缓存中找那些被隐藏保护的流媒体的人一定会非常喜欢。
可以使用“opera:cache?domain=&validation=&list=list&min_size=&max_size=&mime=”这样的形式直接指定想要的内容,我把其中可以使用参数总结了一下:
顺手写了个菜单,功能是查看当前域名下的缓存内容,查看不同类型的缓存文件,清空缓存。 [Opera Cache Menu]
Item, All = external action,,,,find | edit site preferences & delay,10 & go to line start & insert,"opera:cache?domain=" & go to line end & insert,"&validation=&list=list&min_size=&max_size=" & select all & copy & cancel & delay,10 & go to page,"%c"
Item, Audio =external action,,,,find | go to page, "opera:cache?domain=&validation= &list=list&min_size=0&max_size=1000000 &mime=1015&mime=1016&mime=audio_mpeg"
Item, Video = external action,,,,find | go to page, "opera:cache?domain=&validation=&list=list&min_size=0 &max_size=1000000&mime=1023 &mime=1022&mime=video_flv&mime=video_x-flv"
Item, Image = external action,,,,find | go to page, "opera:cache?domain=&validation=&list=list&min_size=0 &max_size=1000000&mime=1010&mime=1009 &mime=1032&mime=1013&mime=1002&mime=1040"
Item, Web Element = external action,,,,find | go to page, "opera:cache?domain=&validation=&list=list &min_size=&max_size=&mime=1000&mime=1034 &mime=1031&mime=1001&mime=1008"
----------------1
Item, Empty Cache = external action,,,,delete | clear disk cache
猜想圣诞节后等Opera的员工开始上班,我们就可以陆续拿到新的10.5测试版了,10.2不会再更新,桌面widget会加入到以后的10.5中,也就是说Opera从10.1直接跳到了10.5,以后两个版本会同步更新,情形类似以前的9.6和10.0 Beta。
再附送一个新发现
opera:bookmarks
请先参考这篇文章。这次没有使用set preferences命令,而全部改用模拟对话框的操作,因为set preferences会让浏览器卡住一两秒钟。另外还添加了一点新功能,把地址栏或者剪切板中的地址设置为代理IP,把当前网址添加到代理例外列表,在Opera中调用,并且可以关闭外部代理程序。目前想到的就这么多,还有什么有创意的想法欢迎告诉我。
点击
这里,用文本编辑器打开其中的文件,把下面的代码复制到最后,保存,记得编码一定要是UTF-8,不然会乱码。打开Opera。然后把这个按钮拖放到Opera的工具栏中:
Proxy Menu Pro
[Proxy Menu Pro]
--------------------1
Item, "手动设置代理..."="external action,,,,Menu Tools | show preferences & show proxy servers"
--------------------2
item, "从地址栏复制代理"="external action,,,Add Proxy,Add widget | focus address field & select all & copy & cancel & go to page, "opera:config#proxy|httpserver" & delay, 1000 & select all & paste & focus next widget & focus next widget & paste & focus address field & insert, "opera:config#proxy" & go & focus previous widget & focus previous widget & click button & delay, 10 & ok & delay,1 & close page"
item, "从剪切板复制代理"="external action,,,,Add widget | go to page, "opera:config#proxy|httpserver" & delay, 1000 & select all & paste & focus next widget & focus next widget & paste & focus address field & insert, "opera:config#proxy" & go & focus previous widget & focus previous widget & click button & delay, 10 & ok & delay,1 &close page"
--------------------3
item, "添加例外"="external action,,,,Transfer Success | edit site preferences & delay, 10 & copy & cancel & delay,1 & disable proxy servers & show preferences & show proxy servers & delay, 10 & check item & focus next widget & focus next widget & focus next widget & check item & focus next widget & focus next widget & focus next widget & focus next widget & focus next widget & focus next widget & focus next widget & focus next widget & check item & focus next widget & go to end & insert,"," & paste & ok & delay,10 & cancel"
--------------------4
item, "127.0.0.1:8580"="external action,,,,Extended Security | disable proxy servers & show preferences & show proxy servers & check item & focus next widget & insert,"127.0.0.1" & focus next widget & insert,"8580" & focus next widget & check item & focus next widget & insert,"127.0.0.1" & focus next widget & insert,"8580" & ok & delay,10 & cancel"
item, "127.0.0.1:8000"="external action,,,,Extended Security | disable proxy servers & show preferences & show proxy servers & check item & focus next widget & insert,"127.0.0.1" & focus next widget & insert,"8000" & focus next widget & check item & focus next widget & insert,"127.0.0.1" & focus next widget & insert,"8000" & ok & delay,10 & cancel"
item, "127.0.0.1:8081"="external action,,,,Extended Security | disable proxy servers & show preferences & show proxy servers & check item & focus next widget & insert,"127.0.0.1" & focus next widget & insert,"8081" & focus next widget & check item & focus next widget & insert,"127.0.0.1" & focus next widget & insert,"8580" & ok & delay,10 & cancel"
item, "127.0.0.1:4041"="external action,,,,Extended Security | disable proxy servers & show preferences & show proxy servers & check item & focus next widget & insert,"127.0.0.1" & focus next widget & insert,"4041" & focus next widget & check item & focus next widget & insert,"127.0.0.1" & focus next widget & insert,"4041" & ok & delay,10 & cancel"
--------------------5
item, "运行 FreeGate"="external action,,,,Mail Attachments | execute program,"notepad.exe""
item, " 退出 FreeGate"="execute program,"cmd.exe","/c taskkill /im fg*""
item, "运行 GAppProxy"="external action,,,,Mail Attachments | execute program,"notepad.exe""
item, " 退出 GappProxy"="execute program,"cmd.exe","/c taskkill /im gui.exe /f /t || taskkill /im proxy.exe /f || taskkill proxy.py /f""
item, "运行 Tor"="external action,,,,Mail Attachments | execute program,"notepad.exe""
item, " 退出 Tor"="execute program,"cmd.exe","/c taskkill /im tor.exe"
如果你不嫌麻烦,还可以把这个按钮做得更强大一点,点击左边可以控制全局代理的开关,点击右边的三角形就打开代理菜单。但麻烦之处就在于因为使用了很多个“&”运算符,Opera无法判断当前的状态,所以就不能根据使用代理的情况给出正确的图标,不过,我还是找到了一个解决的办法。按钮如下:
Proxy Menu Pro
opera:/button/disable proxy servers, , , "proxy menu pro", "check skin" | enable proxy servers & show preferences & show proxy servers & focus previous widget & focus previous widget & focus previous widget & focus previous widget & focus previous widget & uncheck item & ok & delay, 10 & cancel + show popup menu, "proxy menu pro"
你还需要对皮肤文件做一下小小的修改,点击
这里查看当前使用的皮肤文件的位置,关闭Opera,打开皮肤压缩包,把里面的skin.ini拖出来,用文本编辑器打开,在最后加上下面的几行语句,保存后再拖回压缩包里,然后再打开Opera,把上面的按钮拖放到Opera的工具栏中。
[Check Skin]
Type =
Box
Tile Center = checkbox/selected.png
Width = 16
Height = 14
[Check Skin.selected]
Type = Box
Tile Center = checkbox/unselected.png
Width = 16
Height = 14
最后的效果如上图